تمناي باران
سعی نکن انجام بدی، انجام بده...
تاريخ : چهارشنبه ۱۶ فروردین ۱۳۹۱ | نویسنده : رشید باقری
سلام به همه دوستان

مسئله: فرض میکنیم فیلدی به نام type داریم که سه مقدار 1 و 2 و 3 را در خودش میتونه داشته باشه. میخوایم کوئری بنویسیم که تعداد 1 و 2 و 3 ها را به تفکیک به همراه تعداد کل اطلاعات وارد شده در این جدول را در یک سطر نمایش بدیم.

یکی دوتا راه حل به نظرم رسید که یکیشا به کمک دوست عزیزم آقای مهندس مشعل تونستیم انجام بدیم. ولی برای همین مسئله به ظاهر ساده، چندتا select تو درتو به همراه left join و دیگر مخلفات بود.

امروز تونستم به کمک دستور IIf، به راحتی این مشکل را حل کنم. کوئری را میشه به این صورت به راحتی نوشت:


SELECT sum(IIf(t1.type=1,1,0)) AS count1, sum(IIf(t1.type=2,1,0)) AS count2, sum(IIf(t1.type=3,1,0)) AS count3,count(t1.type) as Total FROM Table1 AS t1;


یک مشکل جدید: دستور بالا را وقتی در SQLExpress 2008 که در دات نت قرار داره اجرا کردم، خطا داد. به همین دلیل به جای IIf از CASE استفاده کردم تا درست بشه. شکل دستوری CASE در SQL به این شکله:

CASE When t1.type = 1 Then 1 Else 0 END



پانوشت: برای حل این مسئله، تقریبا 3-4 روزی وقت گذاشتم. الان که تونستم جواب مسئله را بدست بیارم، فهمیدم که مشکل از اطلاعات ناکافی من از دستورات SQL بوده.