PDA

View Full Version : سوال در مورد یک کوئری



Hossein Bazyan
شنبه 17 بهمن 1388, 13:47 عصر
دوستان سلام
بانکی را دارم که میخوام اطلاعات آن را بر اساس دو فیلد نمایش دهم .
فرض کنید جدول من دو فیلد بنامهای r_number و accord با مقادیر زیر دارد


r_number accord
20001 1
20001 1
20001 0
20001 0
20002 1
20002 1
20002 1
20002 1
20002 1

حال میخوام با استفاده از کوئری رکوردهایی را که فیلد accord آنها یک باشد را دسته بندی کنم . من با استفاده از Group by اینکار رو انجام میدهم



SELECT * FROM BankName Group by r-number

که به شکل


20001 1
20002 1

نمایش داده میشود اما من میخوام زمانی فیلد r_number نمایش داده شود که همه فیلدهای accord متناسب با آن 1 باشد یعنی در دمثال بالا 20001 نمایش داده نشود.

محمد سلیم آبادی
شنبه 17 بهمن 1388, 14:21 عصر
select r_number
from BankName as t1
group by r_number
having not exists
(select *
from BankName as t2
where t1.r_number=t2.r_number
and accord=0)


یا



SELECT r_number
FROM BankName
Group by r_number
having max(case when accord=0 then 1 else 0 end)=0

Hossein Bazyan
شنبه 17 بهمن 1388, 15:30 عصر
سلام
دست شما درد نکنه عالی بود اما ایا میتوان شرط دیگری را هم اضافه نمود مثلا همان لیست نمایش داده شود به شرطی که مثلا فیلد IsEnd که Boolean میباشد true باشد؟

محمد سلیم آبادی
شنبه 17 بهمن 1388, 15:42 عصر
سلام دوست عزیزم،
آیا فقط مقادیر 0 و 1 در ستون accord ذخیره می شوند؟ اگر جواب مثبت است دو کوئری پست دوم برای همیشه به درستی کار خواهد کرد در غیر اینصورت به جای عبارت accord=0 عبارت accord<>1 را جایگزین کنید.

زبان SQL هیچ سوالی را بدون جواب نمی گذارد!

آیا این مقدار به ازای تمام داده های هر گروه باید true باشد. یعنی تنها r_number هایی را بدست آوریم که به ازای تمام سطرهای آن مقدار دو فیلد IsEnd و accord به ترتیب true و 1 باشد؟

Hossein Bazyan
شنبه 17 بهمن 1388, 15:46 عصر
سلام دوست عزیزم،
آیا فقط مقادیر 0 و 1 در ستون accord ذخیره می شوند؟

بله ، فقط یک و صفر ذخیره میشه
اما دومی هم جواب نداد.


آیا این مقدار به ازای تمام داده های هر گروه باید true باشد. یعنی تنها r_number هایی را بدست آوریم که به ازای تمام سطرهای آن مقدار دو فیلد IsEnd و accord به ترتیب true و 1 باشد؟

بله دقیقا"

محمد سلیم آبادی
شنبه 17 بهمن 1388, 17:44 عصر
اما دومی هم جواب نداد.

ببخشید، متوجه منظورتون نشدم.

اینو امتحان کنید:


SELECT r_number
FROM BankName
Group by r_number
having max(case when accord=0 then 1 else 0 end)=0
and max(case when IsEnd = 0 then 1 else 0 end)=0

Hossein Bazyan
سه شنبه 20 بهمن 1388, 16:04 عصر
سلام
دوست عزیز یک سوال دیگه هم دارم و اینکه
در جدول مقابل من سه تا فیلد دارم که


Field1 Field2 Filed3
F1 F2 F3
F1 R2 R3
T1 F2 T3
D1 D2 D3
F1 F2 J3


حال میخوام در آخرین سطر تعداد رکوردها را داشته باشم . میتوان از Count و Group By استفاده کرد اما مشکل اینجاست که میخوام همه رکوردها نمایش داده شوند در Group By رکوردها را دسته بندی میکند مثلا در مثال بالا به ازای F1 فقط یک سطر برگردانده میشود.

محمد سلیم آبادی
سه شنبه 20 بهمن 1388, 16:12 عصر
لطفا سوال جدید را در یک تاپیک جدید دنبال کنید. حتما پاسخ خواهم داد. در ضمن نتیجه ی مورد نظر را هم به نمایش دراورین.