PDA

View Full Version : مشکل در یک کوری برای ترکیب شرط AND و OR



NasimBamdad
چهارشنبه 04 دی 1392, 14:34 عصر
سلام

یک سوالی دارم . در قسمت WHERE کوری ام 5 تا شرط دارم که با هم دیگه AND شدند .

ولی 2 شرط هم دارم که باید مقدار OR داشته باشند ، یعنی از مقدار یک ستون می بایست یا مقدار 10 باشه یا 13 ، در عین حال هم این AND ها هم هستند

چه باید کرد ؟! چه طوری کوری رو بنویسم ؟

hamid_hr
چهارشنبه 04 دی 1392, 15:26 عصر
t1 = 1 and t2 = 2 and(t3 = 10 or t3 = 13)

NasimBamdad
پنج شنبه 05 دی 1392, 06:48 صبح
t1 = 1 and t2 = 2 and(t3 = 10 or t3 = 13)

ممنون بابت کدتون

ببنید این کد شما خیلی خوب جواب داد ، اما یک مشکلی دارم ، وقتی کوری رو به صورت جدا جدا می نویسم و در نهایت جمع می کنم رقم هام درسته ، ولی در بعضی مواقع وقتی OR می کنم رکورد ها رو کم می زنه


t1 = 1 and t2 = 2 and(t3 = 10)

t1 = 1 and t2 = 2 and(t4 = 13)


به روش بالا وقتی می زنم و رقم ها رو جمع می کنم درسته ، اما وقتی OR می کنم بعضی مواقع جواب نمیده ، برای همون دسته رکورد و مقدار رو کم و زیاد می زنه

hamid_hr
پنج شنبه 05 دی 1392, 08:41 صبح
خب ببين اگه ركوردي باشه كه هم t3 = 10 هم t4 = 13 باشه وقتي جدا سلكت بگيري دو بار ميارش ولي تو كوئري با or يك بار ميارش

NasimBamdad
پنج شنبه 05 دی 1392, 09:55 صبح
T3 همیشه 10 هست و T4 همیشه 13

کدام روش درست هست ؟ نمیشه که T3 هم 13 باشه و هم 14

یعنی رکورد من یا T3 داره یا T4

NasimBamdad
پنج شنبه 05 دی 1392, 10:26 صبح
ببخشی من متوجه کوری شما نشدم ، ببنید ما اصلا T4 نداریم

کوی ما این طوریه


t1 = 1 and t2 = 2 and(t3 = 10 OR t3 = 13)

NasimBamdad
پنج شنبه 05 دی 1392, 10:38 صبح
ببینید من یکجا در گزارش باید جدا جدا بنویسم ،


یعنی بنویسم چند تا T3 =10 داریم و چند تا T3 = 13 داریم

جای دیگه در خروجی XML باید جمع این 2 تا رو بنویسم ، یعنی بهم کلان T3 = 13 و T3 = 10 چند تا داریم

حالا موندم OR کنم یا AND کنم
اصلا مخم کار نمی کنه

amir20611
پنج شنبه 05 دی 1392, 14:06 عصر
سلام ، من اگه می خواستم این کد رو بنویسم اینجوری میشد

t1 = 1 and t2 = 2 and t3 = 10 or
t1 = 1 and t2 = 2 and t3 = 13

مرسی حمید جان که منو از این بایت راحت کردی ، dev جان این کد اخری که گذاشتی مشکلت رو حل میکنه احتمال میدم جای دیگه داری اشتباه میکنی
این هم تست کد شما برروی جدول خودم

select count (*) from Messages_Box where UserID='1' and (MsgType =1 or MsgType =2)

declare @C int = (select count (*) from Messages_Box where UserID='1' and MsgType =1)
set @C =(select count (*) from Messages_Box where UserID='1' and MsgType =2) + @C
select @C

NasimBamdad
جمعه 06 دی 1392, 00:51 صبح
سلام ، من اگه می خواستم این کد رو بنویسم اینجوری میشد

t1 = 1 and t2 = 2 and t3 = 10 or
t1 = 1 and t2 = 2 and t3 = 13

مرسی حمید جان که منو از این بایت راحت کردی ، dev جان این کد اخری که گذاشتی مشکلت رو حل میکنه احتمال میدم جای دیگه داری اشتباه میکنی
این هم تست کد شما برروی جدول خودم

select count (*) from Messages_Box where UserID='1' and (MsgType =1 or MsgType =2)

declare @C int = (select count (*) from Messages_Box where UserID='1' and MsgType =1)
set @C =(select count (*) from Messages_Box where UserID='1' and MsgType =2) + @C
select @C


سخته اینا ، میشه یکم توضیح بیشتر بدی و ساده تر باشه

amir20611
جمعه 06 دی 1392, 09:25 صبح
چیز خاصی نیست ، خط اول تعداد ردیف ها یی رو که نوعشون 1 یا 2 هستند رو برمیگردونه که میشه 87 اولی توی عکسی که گذاشتم
خط دوم C@ متغییری از نوع int ساخته میشه که برابر با تعداد ردیف هایی که نوعشون 1 هست
خط سوم C@ برابر با تعداد ردیف هایی که نوعشون 1 هست میشه
خط چهارم C@ خروجی گرفته میشه که برابر 87 دومی در عکس هست

NasimBamdad
جمعه 06 دی 1392, 09:53 صبح
کوری رو به صورت زیر نوشتم اما بازم مقدارش متفاوت هست ،

وقتی جدا جدا میگیرم مقدار اولی 59 و دومی 11 میشه ، و جمعش 70 میشه

اما وقتی OR می کنم حالا با هر روشی ، جمعش میشه 69 تا !