2016-07-07 42 views
0

我有這個簡單的查詢集合函數:不同條件

SELECT 
a.new_funderidname as Funder, 
COUNT(a.new_funderidname) as Units 
FROM new_dealsheet a 
LEFT JOIN salesorder B ON a.new_dsheetid = B.salesorderid 
WHERE a.New_PassedToAdmin = 1 
GROUP BY a.new_funderidname 
ORDER BY Units desc 

這很好,但我的乙表包含另一場名爲MAINT,我還需要獲得計數這兩個可能的值,像

SELECT 
a.new_funderidname as Funder, 
COUNT(a.new_funderidname) as Units, 
COUNT(a.new_funderidname) **WHERE b.maint=1 as UnitsMaint**, 
COUNT(a.new_funderidname) **WHERE b.maint=0 as UnitsNotMaint** 
FROM new_dealsheet a 
LEFT JOIN salesorder B ON a.new_dsheetid = B.salesorderid 
WHERE a.New_PassedToAdmin = 1 
GROUP BY a.new_funderidname 
ORDER BY Units desc 

我可以在單個查詢中做到這一點嗎?

感謝

回答

4

用例

SELECT 
a.new_funderidname as Funder, 
COUNT(a.new_funderidname) as Units, 
sum(case when b.maint=1 then 1 else 0 end) as UnitsMaint, 
sum(case when b.maint=0 then 1 else 0 end) as UnitsNotMaint, 
FROM new_dealsheet a 
LEFT JOIN salesorder B ON a.new_dsheetid = B.salesorderid 
WHERE a.New_PassedToAdmin = 1 
GROUP BY a.new_funderidname 
ORDER BY Units desc 
+3

你應該改變COUNT總結。無論其中包含什麼值,計數都會計算該行。 :) –

+1

錯誤,謝謝@SeanLange – TheGameiswar

1

如果MAINT始終爲0或1,你可以用Sum(b.mainnt)總結他們Sum(1-b.mainnt)

SELECT 
a.new_funderidname as Funder, 
COUNT(a.new_funderidname) as Units, 
Sum(b.mainnt) as UnitsMaint, 
Sum(1 - b.mainnt) as UnitsNotMaint 
FROM new_dealsheet a 
LEFT JOIN salesorder B ON a.new_dsheetid = B.salesorderid 
WHERE a.New_PassedToAdmin = 1 
GROUP BY a.new_funderidname 
ORDER BY Units desc 

你可能需要做內部Sum鑄造如果b.mainnt是bit類型:例如SUM(cast(b.mainnt as int))SUM(1 - cast(b.mainnt as int))

0

你可以使用旋轉功能。

select Funder, 
UNITSMAINT+UNITSNOTMAINT as UNITS, 
UNITSMAINT, 
    UNITSNOTMAINT 
    from 
(
SELECT 
a.new_funderidname as Funder,b.Maint 
FROM new_dealsheet a 
LEFT JOIN salesorder B ON a.new_dsheetid = B.salesorderid 
WHERE a.New_PassedToAdmin = 1 
) 
PIVOT 
    (
    count(b.Maint) 
    For(1 as UNITSMAINT,0 as UNITSNOTMAINT) 
    ); 

參考Pivot function