2011-12-07 192 views
2

我使用SQL Server 2005和VS 2008.I時遇到如下所示計算總在SQL Server總列的2005

SELECT Month 
    , SUM(Man) AS Man 
    , SUM(Sal) AS Sal 
    , SUM(Man + Sal) AS Total 
FROM (  
     SELECT DATENAME(MONTH, DOB) AS Month 
       , CASE WHEN TypeOfPost = 'Manager' THEN 1 ELSE 0 END AS Man 
       , CASE WHEN TypeOfPost = 'Sales' THEN 1 ELSE 0 END AS Sal 
     FROM tableName 
    ) g   
GROUP BY 
    Month 

,其生成如下的輸出

Output-- 
------------------------------------- 
Month  Man  Sal  Total 
-------- ----- ------  --------- 
January  1  1   2 
June   1  NULL  1 
November  1  1   2 

但查詢現在我想計算Total欄的總數。所以幫我一下。

Expected Output-- 
------------------------------------- 
Month  Man  Sal  Total 
-------- ----- ------  ------- 
January  1   1   2 
June   1  NULL  1 
November  1   1   2 
------------------------------------- 
         Total  5 
------------------------------------- 
+0

「總計」欄未在查詢想通! – amrfaissal

+0

對不起FGraviton,但現在看看我編輯它.... –

+0

我認爲你應該使用T-SQL來重寫這個查詢(與變量) – amrfaissal

回答

4

你可以使用在GROUP BYWITH ROLLUP選項 - 這會給你一個額外的行包含「捲起」(總結)值:

SELECT Month 
    , SUM(Man) AS Man 
    , SUM(Sal) AS Sal 
    , SUM(Man + Sal) AS Total 
FROM (  
     SELECT DATENAME(MONTH, DOB) AS Month 
       , CASE WHEN TypeOfPost = 'Manager' THEN 1 ELSE 0 END AS Man 
       , CASE WHEN TypeOfPost = 'Sales' THEN 1 ELSE 0 END AS Sal 
     FROM tableName 
    ) g   
GROUP BY 
    Month WITH ROLLUP 

額外的生產線將包含NULL對於Month列,而應總結所有其他列你

+0

「WITH ROLLUP」並不新鮮。只需「分組設置」。這應該在2005年工作得很好。 –

+0

@MartinSmith:sheesh - 你是對的 - 這MSDN圖書在線有時令人困惑....好 - 更好!在那種情況下,我的解決方案應該在2005年就能正常工作,對吧? :_) –

+1

是的。我想是這樣! –