سلام
ایام سوگواری آقا ابا عبدالله الحسین را تسلیت عرض می کنم
برای گزارش گیری ار کریستال ریپورت استفاده کرده ام حال می خواهم رکورد های تکراری را نمایش ندهد
دومین این که رکورد های تکراری را جمع به ببندد
با تشکر
سلام
ایام سوگواری آقا ابا عبدالله الحسین را تسلیت عرض می کنم
برای گزارش گیری ار کریستال ریپورت استفاده کرده ام حال می خواهم رکورد های تکراری را نمایش ندهد
دومین این که رکورد های تکراری را جمع به ببندد
با تشکر
نمیدونم شما دارید از چه روشی استفاده میکنید ولی باید در دستور select از فرمان Group by استفاده کنی تا تکراریهارو نشون نده
select * from table1 Group By factor
factor اسم یکی از فیلداتونه
factor اسم فیلدی هست که تکراریهاشو حذف میکنه و فقط یکیشو نشون میده به هر حال کدی که کریستال ریپورتو باز میکنید تا جدولتونو نشون بده بزاربد اینجا
ضمن تشکر کدام قسمت باید بنویسم دستور را
مثل کد زیر :
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();
من نمیدونم شما دارید از چه راهی استفاده میکنید ولی شما ابتدا در کریستال ریپورت جدولتونو بزارید مثل جدول table1 یعنی add کنید بعدش با کدی که در پست قبلی گفتم اونو نشون بدین البته باید یک فرم درست کنید و یک crystalReportViewer1 قرار بدی و مقدار modifires روهم public کنی .
اگه ممکن یه مثال کامل بزارین با تشکر
اینم یک فایل pdf که فکر کنم کارتو راه بندازه
برای رفع رکورد تکراری باید از groupby استفاده کنی فکر نکنم راه دیگه ای باشه سواله دومتون رو هم واضح نیست برای جمع باید از قسمت runing total field استفاده کنید
crystalReportViewer1.SelectionFormula = "select * from tblkala Group By kala";
crystalReportViewer1.SelectionFormula = "{tblkala.kala} <> 'چںپگ©'";
crystalReportViewer1.ReportSource = @"\hesab\rp\Listkala.rpt";
من این کارو کردم جواب نداد
کجا از groupby استفاده کنم اگه ممکن یه مثال کاملی برام بفرستید با تشکر
فکر کنم چون دارید از selection formula استفاده میکنی اینجوری میشه
كسd در اdن مورد مثال كامل نداره
سلام
مهندسین مدیران محترم لطفا راهنمایی کنید
منظورت از مثال کامل چیه من یه مثال کامل واست گذاشته بود در پست های قبلی
شاید این لینک که در رابطه با حذف عناصر تکراری با استفاده از اشیاء و متد Distinct هست به شما کمک کنه
کسی نیست که برای برنامه شون از گزارش گیری استفاده کند
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();
اینم از گزارش گیری مختصر و مفید دیگه چی میخوای ازین بهتر
اگه بعد از دستور select بنویسی distinct عناصر تکراری نمایش داده نمیشوند.
select distinct * from table
برای جمع مقادیر پس از اینکه group by کردی از sum استفاده کن.
بانك اطلاعاتی شامل:
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'
برای به دست آوردن جمع تعداد کالاها هم این کوئری:
selectSUM(tedad),idkala
from tblkala
groupby idkala
ماهیت جداولی که شما در اینجا گذاشتید بدین صورت هست که چون تعداد هر کالا ثبت میشه، پس نیازی نیست که به ازای هر تعدادی که یک مشتری از یک کالا میخره ، سطرها تکرار بشه.
حالا اگر سوالتون را بد متوجه شدم، بیشتر توضیح بدید.
چرا کسی سوال منو متوجه نمی شود
این بار سوالم را به تصویر کشیدم مدیران ارشد لطفا کمکم کنید
اصلا معلوم نیست شما چی میخواید چی نمیخواید خوب طراحی یک برنامه دست خودتونه هر جوری که خودت دوست داری باید اصلاحش کنی در ضمن در عکسی که گذاشتین چیزی فرقی نکرده فقط یک فیلد عوض شده فکر کنم شما در طراحی فرم کریستال ریپورت مشکل دارید
سلام
سوالم را به شكل دگري مطرح مي كنم
1- يك جدول داريم كه اسامي افراد مي باشد حال مي خواهيم در يك گزارش داشته باشيم به شكل زير
رديف - نام - تعداد اسامي(يعني اسم َآنهايي كه علي تكرار نكند جمع آنها را بنويسد)
2- يك جدول داريم كه اسامي افراد و جدول ديگري هم افرادي كه عضو فعال هستن ثبت شده حال مي خواهيم افرادي كه در جدول دوم ثبت نشده و يا عضو فعال نمي باشن را ليست كند با تشكر
این کدی رو که مینویسم ببین بعد شبیه این کدی رو که کارت رو راه میندازه خودت بنویس
select * from T-afrad where T-arfad.id in (select id from T-faalind) group by T-afrad.Name
این کد افرادی رو که عضو هستن رو بر اساس نام گروه بندی میکنه و میده فک کنم دیگه اضافه کردن بقیش راحته
گزارشی که می گفتم مشکل دارم را ممکن کمک کنید حل بشه ضمیمه کرده ام
سلام
با توجه به طراحی جداول شما، جواب را اینطوری میشه داد.
نگاه کنید، اگر بخواید تعداد اسامی را در همان جدولی داشته باشید که مشخصات افراد هست، به هر حال به ازای هر سطر این تعداد تکرار خواهد شد.
یعنی به طور مثال جدول 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
برای این سوالتون هم که البته این "یا" ی وسطش یعنی می تونیم دوتا کوئری جدا بنویسیم.
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)
چه طوری می شه داده ها را براساس تاریخ دسته بندی کرد به عنوان مثال من می خوام جمع داده های هر ماه را نشون بدم مثلا در تاریخ 10/1/88 مقدار5،درتاریخ15/1/88 مقدار7ودر تاریخ20/1/88مقدار8،در تاریخ10/2/88 مقدار3و در تاریخ15/2/88 مقدار5 و همین طور الی آخر در پایان می خواهم جمع مقادیر هر ماه را به صورت دسته بندی شده داشته باشم طوری که در گزارش نهایی ماه اول یکبار،ماه دوم یکبار و ماههای بعدی نیز یکبار تکر شده باشند و در کنار آنها جمع مقادیر ماهیانه بیاید.