ورود

View Full Version : ایجاد یک Select با چند Sum و شرطهای مختلف



KIMIA1981
یک شنبه 01 بهمن 1391, 09:58 صبح
سلام

من می خواستم چند Sum با شرطهای مختلف در یک Select داشته باشم ...

hassan_reza
یک شنبه 01 بهمن 1391, 10:43 صبح
خب دوست من! الان چه کمکی از دست ما بر میاد!؟:متفکر:
لطفا یک کوئری یا اطلاعاتی از داده ها و خواسته ای که دارید بنویسید تا دوستان بتوانند شما را راهنمایی کنند.:چشمک:

KIMIA1981
یک شنبه 01 بهمن 1391, 10:50 صبح
یک سئوال کلی بود می خواستم ببینم مثلا با pivot میشه این کارو کرد یا فقط یک شرط را میشه بکار برد؟
مثلا دو تا Sum مختلف در یک Select رو بخوایم که هرکدوم شرطه خودش را داشته باشه؟

KIMIA1981
یک شنبه 01 بهمن 1391, 10:56 صبح
Select id,
[4639]+[4643]+[4644]+[4645]+[4638] as A,[4636]+[4637] as B from table1
PIVOT(Sum(Tedad)FOR Shart
IN([4639],[4643],[4644],[4645],[4638],[4636],[4637]))AS PivotTable


یعنی می خوام بدونم به جای union کردن چند Select چه راه حله دیگه ای هست؟

حمیدرضاصادقیان
یک شنبه 01 بهمن 1391, 15:48 عصر
سلام.
شما به چند روش میتونید اینکارو بکنید
یک راه استفاده از Subquery هست
یک راه استفاده از CTE هست.

مثال :

select (select sum(prcie) from table 1 where id=1) as sum1,(select sum(price) from table1 where id=2) As Sum2
From table1


یا با CTE

With Sum1 as
(
select Sum(price) as Sum1 from Table1
Where id=
)
,
Sum2 as(
Select Sum(Price) as Sum2 from Table1
Where id=2
)
Select * from Sum1
union
Select * from sum2

و روشهای دیگه که میتونید اینکارو بکنید.
شما باید جزئیات کار رو تشریح کنید تا بشه کاملتر توضیح داد.

KIMIA1981
دوشنبه 02 بهمن 1391, 07:01 صبح
ممنونم از جوابتون ..

می دونید برای اون Subquery , CTE که نوشتید من یک ID همراه Sum می خوام که بعدا با تیبل دیگه ای بر اساس id join کنم .....
یعنی یک Select مشترک می خوام که مثلا sum(prcie) را یکبار با شرطه id=2 یکبار id=3,id=4,..... داشته باشم

محمد سلیم آبادی
دوشنبه 02 بهمن 1391, 08:13 صبح
مثلا دو تا Sum مختلف در یک Select رو بخوایم که هرکدوم شرطه خودش را داشته باشه؟
زبان SQL این قابلیت را به شما می دهد که داخل توابع تجمعی اش شرط و شروط تعیین کنید. به مثال زیر توجه بفرمایید:
SELECT SUM(CASE WHEN ID = 1 AND other_conditions THEN price ELSE 0 END) AS Sum1, .... FROM table_name WHERE ... ;

این تکنیک بهینه ترین و ساده ترین روش بین روش های مختلف هست.
برای آشنایی با سایر تکنیک ها به اینجا (http://30sharp.com/article/13/207/11/%d8%a8%d8%b1%d8%b1%d8%b3%db%8c-%da%af%d8%b2%d8%a7%d8%b1%d8%b4-%d8%a2%d9%85%d8%a7%d8%b1%db%8c-crosstab-%d8%a8%d8%ae%d8%b4-%d8%a7%d9%88%d9%84.aspx)و اینجا (http://30sharp.com/article/13/221/11/cross-tabbing-%d8%a8%d8%ae%d8%b4-%d8%af%d9%88%d9%85.aspx) مراجعه کنید