2011-12-07 121 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

是的。我想是这样! –