PDA

View Full Version : لیست رکوردهایی با مجموع یک فیلد مشخص



MNosouhi
شنبه 12 شهریور 1390, 19:38 عصر
سلام
چطور می تونم لیست رکوردهایی را مشخص کنم که مجموع فیلدی از آن جدول با عددی مشخص باشد ؟

مثال : فرض کنید جدولی با نام "فروش" با سه فیلد "کد فروش" ، "نام کالای فروخته شده" و "مبلغ" با مقادیری که در تصویر ضمیمه ، مشاهده می کنید داشته باشیم .
حال مثلا لیست رکوردهایی را می خواهیم که مجموع فیلد "مبلغ" آنها 30 بشود . (در مثال بالا یکی از جواب ها می تواند رکوردهای با کدهای فروش 1 و 3 باشد)

یوسف زالی
یک شنبه 13 شهریور 1390, 13:14 عصر
سلام.
از Having استفاده کن.
select Kala
from atbl
group by Kala
having Sum(Price) = 30

MNosouhi
یک شنبه 13 شهریور 1390, 13:43 عصر
در مثالی که زدم یکی از جواب ها می تونه پنیر و روغن باشه (چون مجموع رکوردهای این دو رکورد 30 می شود ) . اما این جواب با کد شما به دست نمیاد . چون شما برای KALA از Group By استفاده کرده ای .

یوسف زالی
یک شنبه 13 شهریور 1390, 17:42 عصر
برای کاری که شما می خواهید باید از حلقه های متعدد استفاده کرد.
گمان نمی کنم روش اس کیو الی مناسبی برای این کار وجود داشته باشه.
بهتره که درون برنامه UI این کار رو انجام بدید.

MNosouhi
دوشنبه 14 شهریور 1390, 21:44 عصر
دوستان کسی راه حلی که از طریق sql بشه این مسئله را حل کرد نداره؟

pashna
سه شنبه 15 شهریور 1390, 10:35 صبح
سلام ،
من فکر میکنم اینطوری مشکلت حل بشه ،فقط 2تا مشکل هست.. یک اینکه خیلی نامرتبه که خودت باید مرتبش کنی و دو اینکه من تکراری ها رو حذف نکردم .. که خودت باید زحمتشو بکشی.
declare @a int, @b int, @c varchar(50),@d varchar(50)
declare cur1 cursor for
select [مبلغ], [کالا] from forush
open cur1;
fetch next from cur1 into @a, @d;
while @@FETCH_STATUS = 0
begin
declare cur2 cursor for
select [مبلغ], [کالا] from forush;
open cur2;
fetch next from cur2 into @b, @c;
while @@FETCH_STATUS = 0
begin
if (@b+@a = 30)
print @c+@d+ ' ' +convert(varchar,@a+@b)
fetch next from cur2 into @b,@c;
end
close cur2;
deallocate cur2;
fetch next from cur1 into @a,@d;
end
close cur1;
deallocate cur1;

اگر بازم سوالی بود خوشحال میشم کمک کنم