2011-12-07 23 views
2

私は、SQL Server 2005を使用していますし、計算の合計は、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 

しかし、以下のようにVS 2008.Iは、クエリを持っています今私はtotal column.Soの合計を計算したいと思います。

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

「合計」列が問合せに含まれていません。 – amrfaissal

+0

申し訳ありませんが、私はそれを編集しています... –

+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'は新しいものではありません。ちょうど 'GROUPING SETS'。 –

+0

@MartinSmith:sheesh - あなたは正しい - このMSDNのオンラインブックは時々混乱しています。その場合、2005年も私のソリューションはうまくいくはずです。 :_) –

+1

うん。私はそう思う! –