PDA

View Full Version : یک Select با چندین sum و شرط خاص هر کدام !



Shabani.Mojtaba
چهارشنبه 20 شهریور 1387, 13:59 عصر
فرض کنیم سه انبار داریم که یه سری کالا در آنها انبا ر کردیم .
اگه بخواهیم با شرط های مختلف موجودی انبارها را در یک row ببینیم select اون چطور در میاد ؟
مثلا اگر فیلد های جدول ما به این شکل باشند .
id productName qty1 qty2 qty3
موجودی کالا ی مورد نظر در انبار اول : qty1
موجودی کالا ی مورد نظر در انبار دوم: qty2
موجودی کالا ی مورد نظر در انبار سوم: qty3

با شرط نام محصول چگونه می توان در یک row سه تا sum را که هر کدام مربوط به یکی از انبارها ست را ریخت ؟
اگه ابهامی هست توضیح بیشتر بدم ؟
با تشکر

ir_programmer
چهارشنبه 20 شهریور 1387, 15:05 عصر
سوال واضح نیست. توضیح بیشتر بده.
فقط بگم که اگه میخای اطلاعات مختلفی رو جمع کنی از توابع استفاده کن.
اگه سوالتو واضح تر بگی بیشتر کمک میشه کرد.

Shabani.Mojtaba
چهارشنبه 20 شهریور 1387, 15:20 عصر
متشکرم
بطور مثال اگر ما از جدولمون این select را داشته باشیم :
select sum(qty1) where productName= 'bag'
from tbl1

یعنی تعداد کل محصولات کیف از انبار اول .
اما اگر تعداد محصولات کی از انبار اول و محصولات کفش از انبار دوم و محصولات کاپشن از انبار سوم را بخواهیم آنوقت select ما به چه صورتی در می آید ؟
با تشکر از دوست عزیزم.

ir_programmer
چهارشنبه 20 شهریور 1387, 15:28 عصر
اینجوری که میخای select یه چیز ظاهری میشه. همه کار رو تابع انجام میده.
یه تابع بنویس که 2 پارامتر بگیره. نام محصول و نوع انبار
یه خروجی عدد هم تحویل بده.
بعد اونو با یه select سه بار بنویس اما با ورودی های مختلف.

رضا عربلو
چهارشنبه 20 شهریور 1387, 15:49 عصر
SELECT SUM(s) FROM (
select sum(qty1) AS s where ...from tbl1
UNION
select sum(qty1) AS s where ...from tbl2
UNION
select sum(qty1) AS s where ...from tbl3
(

Shabani.Mojtaba
چهارشنبه 20 شهریور 1387, 19:05 عصر
با تشکر از آقای عربلو
ولی این کدی که شما ارائه کردید با عث تولید سه row خواهد شد.

Shabani.Mojtaba
چهارشنبه 20 شهریور 1387, 19:11 عصر
اما اگر فرض کنیم ما در select از group by هم استفاده کنیم و تعداد row ها هم بیش از یکی شود.
یعنی ما برای هر نوع کالا یا محصول که ممکن است شامل اقلام متفاوتی باشد برای هر انبار موجودی بگیریم
در حقیقت همین جاس که از group by استفاده میکنیم و میخواهیم از شروط متفاوت نیز بهره بگیریم.
به نظر شما راه حل چیست ؟

Shabani.Mojtaba
چهارشنبه 20 شهریور 1387, 19:14 عصر
این هم بحث مرتبط که در این زمینه به نتیجه خاصی نرسیده است.
http://barnamenevis.org/forum/showthread.php?t=8326

Shabani.Mojtaba
چهارشنبه 20 شهریور 1387, 19:16 عصر
کسی نیست راهنمایی بکنه ؟

Shabani.Mojtaba
پنج شنبه 21 شهریور 1387, 17:48 عصر
کسی نمیتونه راهنمایی بکنه ؟

رضا عربلو
پنج شنبه 21 شهریور 1387, 18:22 عصر
فکر کنم منظورت این باشد :


SELECT SUM(s1) AS s1, SUM(s2) AS s2, SUM(s3) AS s3 FROM (
select sum(qty1) AS s1, 0 as s2, 0 as s3 where ...from tbl1
UNION
select 0 as s1, sum(qty1) AS s2, 0 as s3 where ...from tbl2
UNION
select 0 as s1, 0 as s2, sum(qty1) AS s where ...from tbl3
(

Shabani.Mojtaba
پنج شنبه 21 شهریور 1387, 20:50 عصر
خیلی متشکر
ولی خطا از پرانتز خطا میگیره :
')' Incorrect syntax near
من اینو توی Query Analyzer مربوط به SQL SERVER 2000 چک کردم این خطا رو داد.
مشکل چطو ر حل میشه ؟

Shabani.Mojtaba
شنبه 23 شهریور 1387, 10:02 صبح
خیلی متشکرم
فکر میکنم مشکلم حل شد.