PDA

View Full Version : نوشتن يك كوئري شرط دار



happy65_sh
شنبه 23 آبان 1388, 11:25 صبح
سلام
دوستاي عزيز مي خواستم يه تابع به شكل زير بنويسم :

if(1) then () else ()
حالا در شرطم(1) ميخواستم همچون چيزي داشته باشم:

كد در ليست (1و2و3و4) وجود دارد
نمي دونم اين شرط را چه طوري بايد بنويسم آيا بايد يه selectCommand باشه يا چيز ديگه اي؟
ممنون ميشم اگه راهنماييم كنيد.
در ضمن مقادير ليست خودش از يه selectCommand به دست مياد.(مقادير 1و2و3و4و فقط نمونه هست)

Reza.ariyan
شنبه 23 آبان 1388, 12:23 عصر
از in استفاده کن



if(select count(*) from table1 where Field1 in (1,2,3,...))>0
begin
...
end
else
begin
...
end


به جای table1 نام جدول مورد نظرت و به جای Field1 نام فیلدی که میخوای مقایسه بشه
همین

Reza.ariyan
شنبه 23 آبان 1388, 12:31 عصر
if(1) then () else ()حالا در شرطم(1) ميخواستم همچون چيزي داشته باشم:
هست)
در ضمن این ساختار SQL نیست

mehdi.mousavi
شنبه 23 آبان 1388, 12:39 عصر
سلام
دوستاي عزيز مي خواستم يه تابع به شكل زير بنويسم :
if(1) then () else ()حالا در شرطم(1) ميخواستم همچون چيزي داشته باشم:
كد در ليست (1و2و3و4) وجود داردنمي دونم اين شرط را چه طوري بايد بنويسم آيا بايد يه selectCommand باشه يا چيز ديگه اي؟ ممنون ميشم اگه راهنماييم كنيد. در ضمن مقادير ليست خودش از يه selectCommand به دست مياد.(مقادير 1و2و3و4و فقط نمونه هست)

سلام.
لطفا به دستور CASE در BOL رجوع کنید (http://msdn.microsoft.com/en-us/library/aa258235%28SQL.80%29.aspx).

happy65_sh
شنبه 23 آبان 1388, 14:03 عصر
در ضمن این ساختار SQL نیست
ضمن تشكر از پاسخگوييت دوست عزيز Reza.ariyan مي دونم اين ساختار SQL نيست:چشمک: من فقط براي رسوندن منظورم از اين شكل و ساختار استفاده كردم همونطور كه در ادامه نوشته ام:

كد در ليست (1و2و3و4) وجود دارد

mehdi6755 عزيز ممنون اما CASE به درد من نمي خوره چون اولا ليستم ثابت نيست در ثاني به ازاي هر عضو ليست بايد كار ثابتي انجام بگيره ولي بر اساس مقداري كه در ليست وجود داره و از select به دست آمده...

در واقع موضوع اين كوئري به قدري برام پيچيده شده كه ديگه خودم از چيزهايي كه مينويسم سر در نميارم:گیج:
جداولي كه مي خواهم بر اساس آنها كوئريم را بنويسم به شكل زير هست:
نام جدول------فيلدها
حكم---- شماره حكم ؛ گروه
آيتم---- شماره آيتم ؛نام آيتم
گروه ها -----شماره گروه؛شماره آيتم ؛مقدارآيتم
آيتمهاي اضافي----شماره حكم ؛ شماره آيتم

حالا كوئري نياز دارم كه جواب در خواست زير را بده:
مقدار آيتم هاي تعريف شده براي يك حكم بر اساس گروه به شرطي كه آن آيتم در آيتم هاي اضافي ثبت نشده باشه.
مثلا فرض كنيد مقادير زير را داريم:

حكم
ش.حكم گروه
1 2
2 2
آيتم
ش.آيتم نام آيتم
1 كيوي
2 پرتقال
گروه ها
ش.گروه ش آيتم مقدار
2 1 1200
آيتم هاي اضافي
ش.حكم ش.آيتم
2 1
2 2


واقعا گيج كننده نيست؟؟؟:عصبانی++::لبخند:

Reza.ariyan
شنبه 23 آبان 1388, 14:45 عصر
SELECT *
FROM Table1
WHERE Field1 IN ( SELECT Field2
FROM Table2 )


با این مثال میتونید به سادگی این کارو انجام بدی
تو این مثال همه فیلد ها رو از جدول Table1 انتخاب میکنه به این شرط که مقدار Field1 یکی از مقادیر Select شدا در دستور IN باشه
مثلا اگر چواب این عبارت ( SELECT Field2 FROM Table2 ) = برابر 1و2و3و6و8و10و5 شود مقدار Field1 نیز باید برابر یکی از این مقادیر باشد
به عبارت دیگه ساده شده این عبارت اینگونه خواهد بود :



SELECT *
FROM Table1
WHERE Field1 IN ( 1,2,3,6,8,10,5 )


یعنی : رکوردهایی را انتخاب کن که مقدار Field1 آن یکی از مقادیر 1,2,3,6,8,10,5 باشد

اگه منظورت این باشه ، وگرنه باید واضحتر بیان کنی