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 تا !
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.