PDA

View Full Version : عدم تکرار رکوردهای تکراری در کریستال ریپورت



mustafa13
دوشنبه 30 آذر 1388, 13:56 عصر
سلام
ایام سوگواری آقا ابا عبدالله الحسین را تسلیت عرض می کنم
برای گزارش گیری ار کریستال ریپورت استفاده کرده ام حال می خواهم رکورد های تکراری را نمایش ندهد
دومین این که رکورد های تکراری را جمع به ببندد
با تشکر

slashslash2009
دوشنبه 30 آذر 1388, 14:19 عصر
نمیدونم شما دارید از چه روشی استفاده میکنید ولی باید در دستور select از فرمان Group by استفاده کنی تا تکراریهارو نشون نده

mustafa13
دوشنبه 30 آذر 1388, 15:42 عصر
نمیدونم شما دارید از چه روشی استفاده میکنید ولی باید در دستور select از فرمان Group by استفاده کنی تا تکراریهارو نشون نده


ممکن یه مسالی بزنی


با تشکر

slashslash2009
دوشنبه 30 آذر 1388, 18:16 عصر
select * from table1 Group By factor

factor اسم یکی از فیلداتونه

mustafa13
سه شنبه 01 دی 1388, 07:53 صبح
select * from table1 Group By factor

factor اسم یکی از فیلداتونه

جواب نداد البته هیچ خطایی هم نگرفت

slashslash2009
سه شنبه 01 دی 1388, 10:07 صبح
factor اسم فیلدی هست که تکراریهاشو حذف میکنه و فقط یکیشو نشون میده به هر حال کدی که کریستال ریپورتو باز میکنید تا جدولتونو نشون بده بزاربد اینجا

mustafa13
سه شنبه 01 دی 1388, 10:59 صبح
ضمن تشکر کدام قسمت باید بنویسم دستور را

slashslash2009
سه شنبه 01 دی 1388, 11:01 صبح
مثل کد زیر :

DataTable dt = new DataTable();
connect consql = new connect();
dt = consql.MySelect("select * from table1 where code='" + comboBox2.Text + "'");
CrystalReport1 rptresult = new CrystalReport1();
rptresult.SetDataSource(dt);
gozaresh frm = new gozaresh();
frm.crystalReportViewer1.ReportSource = rptresult;
frm.crystalReportViewer1.Refresh();
frm.ShowDialog();

mustafa13
سه شنبه 01 دی 1388, 11:38 صبح
مثل کد زیر :

DataTable dt = new DataTable();
connect consql = new connect();
dt = consql.MySelect("select * from table1 where code='" + comboBox2.Text + "'");
CrystalReport1 rptresult = new CrystalReport1();
rptresult.SetDataSource(dt);
gozaresh frm = new gozaresh();
frm.crystalReportViewer1.ReportSource = rptresult;
frm.crystalReportViewer1.Refresh();
frm.ShowDialog();
ممکن توضیح بدهید

slashslash2009
سه شنبه 01 دی 1388, 11:46 صبح
من نمیدونم شما دارید از چه راهی استفاده میکنید ولی شما ابتدا در کریستال ریپورت جدولتونو بزارید مثل جدول table1 یعنی add کنید بعدش با کدی که در پست قبلی گفتم اونو نشون بدین البته باید یک فرم درست کنید و یک crystalReportViewer1 قرار بدی و مقدار modifires روهم public کنی .

mustafa13
سه شنبه 01 دی 1388, 12:05 عصر
اگه ممکن یه مثال کامل بزارین با تشکر

slashslash2009
سه شنبه 01 دی 1388, 12:48 عصر
اینم یک فایل pdf که فکر کنم کارتو راه بندازه

mustafa13
سه شنبه 01 دی 1388, 12:51 عصر
شما باید از قسمت add new item گزینه reporting یک crystal report به برنامتون add کنید . امیدوارم اینکارو بلد باشد. این کارو میتوند در solution explorer با راست کلیک کردن روی نام برنامتون درست مثل موقعی که میخواید یک فرم به برنامتون اضافه کنید انجام بدین بعدش یک فرم میاد گزینه blank رو انتخاب کن سپس در قسمت field explorer بر روی database fields راست کلیک کنید و روی database expert کلیک کنید در قسمت data روی creat new connection بعد ole db(ado بعدش یک فرم باز میشه گزینه microsft ole db provider for sqlserver رو انتخاب کن و next بزن ومثل شکل زیر :http://barnamenevis.org/forum/attachment.php?attachmentid=41547&stc=1&d=1261474453
تغییراتو بده حواست به نام سرور باشه بعدش databasename رو انتخاب کن یعنی دیتابیستو انتخاب کن
کلید next بزن بعدشم کلید finish بعدم جدول یا جدولهایی رو که میخوای گزارش بگیری مثل این یکی شکل add کن اونطرف
http://barnamenevis.org/forum/attachment.php?attachmentid=41548&stc=1&d=1261474782

بعدش ok کن
حالا باید اینو داشته باشی مثلا البته حتما جدوله شما چیزه دیگست
http://barnamenevis.org/forum/attachment.php?attachmentid=41549&stc=1&d=1261475035
بعدم با موس رو هر فیلدی که میخوای کلیک کن و بکش در قسمت سوم بزار حالا کارای پست قبل رو انجام بده
ضمن تشکر دوست عزیز من این کارو کردم مشکل من این که یکی رکورد های تکراری را نشان می دهد دوم این که به جای نام کالا جمع ان را نشان بدهد با تشکر

slashslash2009
سه شنبه 01 دی 1388, 13:10 عصر
برای رفع رکورد تکراری باید از groupby استفاده کنی فکر نکنم راه دیگه ای باشه سواله دومتون رو هم واضح نیست برای جمع باید از قسمت runing total field استفاده کنید

mustafa13
سه شنبه 01 دی 1388, 13:29 عصر
برای رفع رکورد تکراری باید از groupby استفاده کنی فکر نکنم راه دیگه ای باشه سواله دومتون رو هم واضح نیست برای جمع باید از قسمت runing total field استفاده کنید



crystalReportViewer1.SelectionFormula = "select * from tblkala Group By kala";
crystalReportViewer1.SelectionFormula = "{tblkala.kala} <> 'چںپگ©'";
crystalReportViewer1.ReportSource = @"\hesab\rp\Listkala.rpt";

من این کارو کردم جواب نداد
کجا از groupby استفاده کنم اگه ممکن یه مثال کاملی برام بفرستید با تشکر

slashslash2009
سه شنبه 01 دی 1388, 14:08 عصر
فکر کنم چون دارید از selection formula استفاده میکنی اینجوری میشه

mustafa13
سه شنبه 01 دی 1388, 23:46 عصر
كسd در اdن مورد مثال كامل نداره

mustafa13
چهارشنبه 02 دی 1388, 08:55 صبح
سلام
مهندسین مدیران محترم لطفا راهنمایی کنید

slashslash2009
چهارشنبه 02 دی 1388, 11:52 صبح
منظورت از مثال کامل چیه من یه مثال کامل واست گذاشته بود در پست های قبلی

Sajjad1364
چهارشنبه 02 دی 1388, 12:25 عصر
شاید این لینک (http://barnamenevis.org/forum/showthread.php?t=162242)که در رابطه با حذف عناصر تکراری با استفاده از اشیاء و متد Distinct هست به شما کمک کنه

mustafa13
چهارشنبه 02 دی 1388, 13:38 عصر
منظورت از مثال کامل چیه من یه مثال کامل واست گذاشته بود در پست های قبلی


همراه با db با کلیه فرم ها و گزارش باشد

mustafa13
پنج شنبه 03 دی 1388, 11:38 صبح
:قهقهه::قهقهه::قهقهه::قهقهه:: هقهه::قهقهه::قهقهه:کسی نیست که برای برنامه شون از گزارش گیری استفاده کند
:لبخند::لبخند::لبخند::لبخند:: بخند::لبخند::لبخند:

slashslash2009
پنج شنبه 03 دی 1388, 11:46 صبح
DataTable dt = new DataTable();
connect consql = new connect();
dt = consql.MySelect("select * from table1 where code='" + comboBox2.Text + "'");
CrystalReport1 rptresult = new CrystalReport1();
rptresult.SetDataSource(dt);
gozaresh frm = new gozaresh();
frm.crystalReportViewer1.ReportSource = rptresult;
frm.crystalReportViewer1.Refresh();
frm.ShowDialog();
اینم از گزارش گیری مختصر و مفید دیگه چی میخوای ازین بهتر

Open-Source
جمعه 04 دی 1388, 14:30 عصر
اگه بعد از دستور select بنویسی distinct عناصر تکراری نمایش داده نمیشوند.

select distinct * from table

برای جمع مقادیر پس از اینکه group by کردی از sum استفاده کن.

sara.f
جمعه 04 دی 1388, 15:10 عصر
برای رفع رکورد تکراری باید از groupby استفاده کنی فکر نکنم راه دیگه ای باشه سواله دومتون رو هم واضح نیست برای جمع باید از قسمت runing total field استفاده کنید

سلام
group by مقادیر تکراری را حذف نمی کنه، فقط مقادیر رکوردها را بر اساس یک فیلد مرتب می کنه .

mustafa13
جمعه 04 دی 1388, 19:14 عصر
سلام
group by مقادیر تکراری را حذف نمی کنه، فقط مقادیر رکوردها را بر اساس یک فیلد مرتب می کنه .
ضمن تشكر ممكن راهنماdd ام كنdد چكار كنم

sara.f
جمعه 04 دی 1388, 19:31 عصر
ضمن تشكر ممكن راهنماdd ام كنdد چكار كنم

همون طور که دوستمون open-source گفتن: با دستور distinct
شما یه مثال کوچیک از جدولی که داری بزن تا من جواب کامل را به شما بدم.
یعنی مثلا چه فیلدایی داری؟ و کدوم رکوردهاش تکراریه ؟

mustafa13
جمعه 04 دی 1388, 19:37 عصر
همون طور که دوستمون open-source گفتن: با دستور distinct
شما یه مثال کوچیک از جدولی که داری بزن تا من جواب کامل را به شما بدم.
یعنی مثلا چه فیلدایی داری؟ و کدوم رکوردهاش تکراریه ؟



به طور مثال جداول شامل : 1-مشتریان فروشندگان2- كالا3-اجناس خریداری شده یا فروخته شده
حالا مشتری x چه تعدادی از كالا شماره 1 شماره 2 و... برده
مشتریانی كه از كالا شماره 1 برده را لیست كند بدون تكرار همراه با تعدادیی كه برده ان باشد لیست نماید
متشكرم

sara.f
جمعه 04 دی 1388, 19:51 عصر
به طور مثال جداول شامل : 1-مشتریان فروشندگان2- كالا3-اجناس خریداری شده یا فروخته شده
حالا مشتری x چه تعدادی از كالا شماره 1 شماره 2 و... برده
مشتریانی كه از كالا شماره 1 برده را لیست كند بدون تكرار همراه با تعدادیی كه برده ان باشد لیست نماید
متشكرم

فیلدهاتون مشخص نیست، فیلدهاتون اینا هستن؟
یعنی چی مشتریان فروشندگان؟!! بالاخره چندتا فیلد داره؟!!
لطفا فیلدهاتون را به درستی بنویسید.

mustafa13
جمعه 04 دی 1388, 20:10 عصر
فیلدهاتون مشخص نیست، فیلدهاتون اینا هستن؟
یعنی چی مشتریان فروشندگان؟!! بالاخره چندتا فیلد داره؟!!
لطفا فیلدهاتون را به درستی بنویسید.

بانك اطلاعاتی شامل:
tblMF:idmf-name-address-phone-mf
tblkala:idkala-idmf-name-fi-tedad
از این جدول ها می خواهم بدانم كدام مشتری یا فروسنده فلان جنس ر ا به چه تعداد به من فروخته یا من فرخته ام
2- كالا شماره 1 را كدام مشتری ها از من برده ان بدون تكرار همراه با جمع كالایی كه چندین با برده ان می خواهم باشد
نمی دانم توانستم منظورم را برسانم یا نه

sara.f
جمعه 04 دی 1388, 21:37 عصر
بانك اطلاعاتی شامل:
tblMF:idmf-name-address-phone-mf
tblkala:idkala-idmf-name-fi-tedad
از این جدول ها می خواهم بدانم كدام مشتری یا فروسنده فلان جنس ر ا به چه تعداد به من فروخته یا من فرخته ام
2- كالا شماره 1 را كدام مشتری ها از من برده ان بدون تكرار همراه با جمع كالایی كه چندین با برده ان می خواهم باشد
نمی دانم توانستم منظورم را برسانم یا نه
دوست عزیز من متوجه نمی شم.
خب برای سوال یک با کوئری ساده به جواب می رسید.

select idkala,idmf,tedad from tblkala
برای سوال دوم هم:
اگر می خواید شماره کالا تکرار نشه نباید idkala را در کوئری وارد کنید وگرنه نمیشه که مشتری هایی که کالای یک را خریده اند را پیدا کنید و به ازای همه فقط یک بار کالای یک ظاهر شود.

select idmf from tblkala where idkala='1'
برای به دست آوردن جمع تعداد کالاها هم این کوئری:


select SUM(tedad) ,idkala
from tblkala
group by idkala

ماهیت جداولی که شما در اینجا گذاشتید بدین صورت هست که چون تعداد هر کالا ثبت میشه، پس نیازی نیست که به ازای هر تعدادی که یک مشتری از یک کالا میخره ، سطرها تکرار بشه.
حالا اگر سوالتون را بد متوجه شدم، بیشتر توضیح بدید.

mustafa13
دوشنبه 07 دی 1388, 07:56 صبح
چرا کسی سوال منو متوجه نمی شود
این بار سوالم را به تصویر کشیدم مدیران ارشد لطفا کمکم کنید

slashslash2009
دوشنبه 07 دی 1388, 10:18 صبح
اصلا معلوم نیست شما چی میخواید چی نمیخواید خوب طراحی یک برنامه دست خودتونه هر جوری که خودت دوست داری باید اصلاحش کنی در ضمن در عکسی که گذاشتین چیزی فرقی نکرده فقط یک فیلد عوض شده فکر کنم شما در طراحی فرم کریستال ریپورت مشکل دارید

sara.f
دوشنبه 07 دی 1388, 19:34 عصر
چرا کسی سوال منو متوجه نمی شود
این بار سوالم را به تصویر کشیدم مدیران ارشد لطفا کمکم کنید

سلام
دوست عزیز جدولت کاملا دچار بیماریه Redundancy ( افزونگی داده) هست، این جدول که اصلا نرمال سازی نشده.
آخه نیازی نیست که شما به ازای هر خرید مشتری مثلا علی، تمام تاریخچه زندگیشو بیارید توی جدول.
اول باید جدولتون را درست کنید و بعد واسش کوئری بنویسید.

mustafa13
شنبه 19 دی 1388, 16:16 عصر
سلام
دوست عزیز جدولت کاملا دچار بیماریه Redundancy ( افزونگی داده) هست، این جدول که اصلا نرمال سازی نشده.
آخه نیازی نیست که شما به ازای هر خرید مشتری مثلا علی، تمام تاریخچه زندگیشو بیارید توی جدول.
اول باید جدولتون را درست کنید و بعد واسش کوئری بنویسید.
سلام
سوالم را به شكل دگري مطرح مي كنم
1- يك جدول داريم كه اسامي افراد مي باشد حال مي خواهيم در يك گزارش داشته باشيم به شكل زير
رديف - نام - تعداد اسامي(يعني اسم َآنهايي كه علي تكرار نكند جمع آنها را بنويسد)
2- يك جدول داريم كه اسامي افراد و جدول ديگري هم افرادي كه عضو فعال هستن ثبت شده حال مي خواهيم افرادي كه در جدول دوم ثبت نشده و يا عضو فعال نمي باشن را ليست كند با تشكر

moharrami
شنبه 19 دی 1388, 16:46 عصر
این کدی رو که مینویسم ببین بعد شبیه این کدی رو که کارت رو راه میندازه خودت بنویس
select * from T-afrad where T-arfad.id in (select id from T-faalind) group by T-afrad.Name
این کد افرادی رو که عضو هستن رو بر اساس نام گروه بندی میکنه و میده فک کنم دیگه اضافه کردن بقیش راحته

mustafa13
یک شنبه 20 دی 1388, 13:09 عصر
گزارشی که می گفتم مشکل دارم را ممکن کمک کنید حل بشه ضمیمه کرده ام

sara.f
یک شنبه 20 دی 1388, 13:29 عصر
سلام
سوالم را به شکل دگری مطرح می کنم
1- یک جدول داریم که اسامی افراد می باشد حال می خواهیم در یک گزارش داشته باشیم به شکل زیر
ردیف - نام - تعداد اسامی(یعنی اسم َآنهایی که علی تکرار نکند جمع آنها را بنویسد)


سلام
با توجه به طراحی جداول شما، جواب را اینطوری میشه داد.
نگاه کنید، اگر بخواید تعداد اسامی را در همان جدولی داشته باشید که مشخصات افراد هست، به هر حال به ازای هر سطر این تعداد تکرار خواهد شد.
یعنی به طور مثال جدول members را دارید( به عکس جدول members نگاه کنید)
حالا کوئری زیر را برای آن می نویسید

select members.ID,fname,lname,position,
(select count(ID)
from members
where ID in(select members.ID
from members,positions
where members.ID=positions.ID and position='فعال'and fname='صبا'))as [number-of-saba]
from members,positions
where members.ID=positions.ID and position='فعال'
order by fname

که نتیجه ای به صورت زیر داره ( به عکس result 1 توجه کنید.)

در این عکس (result1) می بینید که مشخصات اعضای فعال بدست آمده و فیلدی هم به عنوان تعداد اعضایی که اسمشان صبا هست داریم، ولی خب این تعداد به اندازه سطرهای این کوئری تکرار میشه و در ضمن جلوی اسم آرش هم این تعداد 4 اومده، فقط تنها چیزی که ممکنه ناخوشایند به نظر بیاد اینه که جلوی اسم آرش 4 اومده که مسلما به خاطر اینه که ما تعداد اسامی صبا را خواستیم، حالا شاید دوستان دیگه واسه اینم راه حلی داشته باشن که مثلا برای هر اسمی تعداد همون اسم جلوش نوشته بشه.

ولی راه دیگه ای هم هست که اگر شما فقط بخواید جواب کوئریتون شامل نام اعضای فعال و تعدادشون باشه.
باید کوئری زیر را بنویسید.


select fname,count(members.ID) as number
from members,positions
where members.ID=positions.ID and position='فعال'
group by fname

که جواب اون میشه عکس result 2

sara.f
یک شنبه 20 دی 1388, 13:48 عصر
سلام
2- یک جدول داریم که اسامی افراد و جدول دیگری هم افرادی که عضو فعال هستن ثبت شده حال می خواهیم افرادی که در جدول دوم ثبت نشده و یا عضو فعال نمی باشن را لیست کند با تشکر
برای این سوالتون هم که البته این "یا" ی وسطش یعنی می تونیم دوتا کوئری جدا بنویسیم.

1) افرادی که هنوز اسمشان در جدول دوم ثبت نشده


select distinct members.ID,fname,lname
from positions,members
where members.ID not in ( select ID
from positions)

مثلا من دوتا اسم در جدول اعضا داشتم که هنوز اسمشون در جدول دوم ثبت نشده بود
جواب این شد. (result 3)


2) افرادی که فعال نیستند.


select members.ID,fname,lname,position
from positions,members
where position!='فعال' and positions.ID=members.ID
order by fnam
که جواب میشه( result 4)

aidivandi
یک شنبه 11 بهمن 1388, 22:30 عصر
چه طوری می شه داده ها را براساس تاریخ دسته بندی کرد به عنوان مثال من می خوام جمع داده های هر ماه را نشون بدم مثلا در تاریخ 10/1/88 مقدار5،درتاریخ15/1/88 مقدار7ودر تاریخ20/1/88مقدار8،در تاریخ10/2/88 مقدار3و در تاریخ15/2/88 مقدار5 و همین طور الی آخر در پایان می خواهم جمع مقادیر هر ماه را به صورت دسته بندی شده داشته باشم طوری که در گزارش نهایی ماه اول یکبار،ماه دوم یکبار و ماههای بعدی نیز یکبار تکر شده باشند و در کنار آنها جمع مقادیر ماهیانه بیاید.