View Full Version : sum
rsheytoonak
سه شنبه 14 خرداد 1392, 22:36 عصر
سلام
Form1.ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('select sum(field1) AS field1 from table1');
Form1.ADOQuery1.Open;
این کد جمع کل فیلد رو برام میاره ولی من میخوام جمع اون قسمت از فیلد رو نشونم بده که توی دستور قبل سرچ کردم یعنی اون چیزی که الان دیبیگرید نشون میده رو جمع کنه
ممنون میشم راهنماییم کنید
benyaminrahimi
چهارشنبه 15 خرداد 1392, 10:46 صبح
خوب همون پارامتر ها رو به select برای sum اضافه کنید ... کامپوننت هایی نظیر devexpress یا ehlib اینو تو خودشون دارند
rsheytoonak
چهارشنبه 15 خرداد 1392, 11:44 صبح
من یه سرچ انجام دادم یه سری رکورد برام آورده الان میخوام مجموع یکی از فیلد های این رکوردهایی که سرچ کردم رو در بیارم باید
چکار کنم
یوسف زالی
چهارشنبه 15 خرداد 1392, 12:48 عصر
شما در همون کدی که دارید برای جمع می نویسید یک where اضافه کنید.
مشکل اصلا در حد مشکل نیست.
rsheytoonak
سه شنبه 21 خرداد 1392, 16:16 عصر
شما در همون کدی که دارید برای جمع می نویسید یک where اضافه کنید.
مشکل اصلا در حد مشکل نیست.
ببخشید من یه همچین کدی نوشتم که مشکلی نداره
Form1.ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('select sum(price)AS jam from chek where tarikh like :p1');
Form1.ADOQuery1.Parameters.ParamByName('p1').Value :='%'+Edit14.Text+'%';
Form1.ADOQuery1.Open;
و فیلد مجموع رو نشون میده ولی وقتی میخوام بقیه فیلد ها رو نشون بده کد زیر
Form1.ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('select id,sum(price)AS jam,price from chek where tarikh like :p1');
Form1.ADOQuery1.Parameters.ParamByName('p1').Value :='%'+Edit14.Text+'%';
Form1.ADOQuery1.Open;
خطای زیر رو میده
column 'chek.id' is invalid in the select list because it is not contained in a aggregate function and there is no GROUP BY clause.
ممنون میشم راهنماییم کنید
benyaminrahimi
سه شنبه 21 خرداد 1392, 16:18 عصر
id رو بردار id,sum(price)AS jam
rsheytoonak
سه شنبه 21 خرداد 1392, 18:21 عصر
id رو بردار id,sum(price)AS jam
خوب من میخام id رو هم نمایش بدم اینجوری فقط فیلد جمع نمایش داده میشه
alaveh
چهارشنبه 22 خرداد 1392, 00:12 صبح
خوب من میخام id رو هم نمایش بدم اینجوری فقط فیلد جمع نمایش داده میشه
Form1.ADOQuery1.SQL.Add('select id,sum(price)AS jam,price from chek where tarikh like :p1');
دوست من
وقتی شما sum(price) رو محاسبه میکنی که دیگه نمیتونی ID رو بگیری باهاش . یک نمونه رکورد رو که انتظار داری برات برگردونه خودت روی کاغذ بنویس . چه ID باید کنار فیلد محاسباتی برات قرار بده ؟ اون فیلد محاسباتی ID نداره اصلا چون از مجموع 3 رکورد دیگه تشکیل شده که هر رکورد یک ID مخصوص خودشو داشته . شما نیاز به ID نداری اصلا . اگر خودت به نتیجه نرسیدی بگو میخوای چکار کنی تا کمکت کنیم .
rsheytoonak
چهارشنبه 22 خرداد 1392, 13:33 عصر
Form1.ADOQuery1.SQL.Add('select id,sum(price)AS jam,price from chek where tarikh like :p1');
دوست من
وقتی شما sum(price) رو محاسبه میکنی که دیگه نمیتونی ID رو بگیری باهاش . یک نمونه رکورد رو که انتظار داری برات برگردونه خودت روی کاغذ بنویس . چه ID باید کنار فیلد محاسباتی برات قرار بده ؟ اون فیلد محاسباتی ID نداره اصلا چون از مجموع 3 رکورد دیگه تشکیل شده که هر رکورد یک ID مخصوص خودشو داشته . شما نیاز به ID نداری اصلا . اگر خودت به نتیجه نرسیدی بگو میخوای چکار کنی تا کمکت کنیم .
آیا راهی وجود داره که اون 3 تا رکورد فیلدهاش رو نمایش بدم بعد جمع فیلد price اون 3 تا رکورد رو هم تو یکی از فیلدهای jam ببینم؟
alaveh
چهارشنبه 22 خرداد 1392, 17:12 عصر
آیا راهی وجود داره که اون 3 تا رکورد فیلدهاش رو نمایش بدم بعد جمع فیلد price اون 3 تا رکورد رو هم تو یکی از فیلدهای jam ببینم؟
بله
یکبار بنویس :
Form1.ADOQuery1.SQL.Add('select sum(price)AS jam from chek where tarikh like :p1');
یکبار هم بنویس :
Form1.ADOQuery1.SQL.Add('select id,price from chek where tarikh like :p1');
rsheytoonak
چهارشنبه 22 خرداد 1392, 18:21 عصر
بله
یکبار بنویس :
Form1.ADOQuery1.SQL.Add('select sum(price)AS jam from chek where tarikh like :p1');
یکبار هم بنویس :
Form1.ADOQuery1.SQL.Add('select id,price from chek where tarikh like :p1');
اینجوری که فقط فیلد id و price نمایش داده میشه من میخوام همزمان با نمایش رکوردهای id و price که براساس tarikh سرج کردم جمع فیلد price رو هو نمایش بدم
alaveh
پنج شنبه 23 خرداد 1392, 02:36 صبح
ببین دوست من
به نوشته هام توجه نمیکنی .
روی کاغذ برای خودت فیلدهایی که فکر میکنی با اون کویری که نوشتی باید جواب بگیری رو بنویس خودت متوجه میشی چرا نمیتونی انتظار جواب داشته باشی :
من برات مثال میزنم . 3 رکورد داری مثلا :
1 : ID = 1 Price = 10
2 : ID = 2 Price = 15
3 : ID = 3 Price = 25
حالا شما میخوای بنویسی Select ID,Price,Sum(Price) خوب فرض کن هر سه رکورد رو بخواد برگردونه . چه جوابی از این مد نظرته که بگیری ؟ اینجوری ؟ این جواب که به درد نمیخوره . بی ارزشه . یک فیلد تکراریه .
1 : ID = 1 Price = 10 Sum(Price) = 50
2 : ID = 2 Price = 15 Sum(Price) = 50
3 : ID = 3 Price = 25 Sum(Price) = 50
به هر صورت من که متوجه نمیشم این چه سودی داره ولی روشش میتونه اینجوری باشه . از اونجا که این عدد ثابته و یکبار محاسبه میشه میشه یک بار با کویری زیر این عدد رو محاسبه کرد :
Form1.ADOQuery1.SQL.Add('select sum(price)AS jam from chek where tarikh like :p1');
و مثلا توی یک متغیر به نام jam نگهش داشت و بعد اینجور ازش استفاده کرد :
Form1.ADOQuery1.SQL.Text:='select id,price,'+inttostr(jam)+'as jam from chek where tarikh like %'+Edit14.Text+'%'
benyaminrahimi
شنبه 25 خرداد 1392, 15:53 عصر
select id,sum(price)AS jam,price from chek group by id,price
البته چون نتیجه چند سطری میشه باید تو یه گرید نمایش بدی
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.