在SQL Server 2005中计算总列的总数

3

我正在使用SQL Server 2005和VS 2008。我有一个如下所示的查询:

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

现在我想计算“总计”列的总和,请帮帮我。

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

“Total”列没有在查询中计算! - amrfaissal
抱歉FGraviton,但现在请看我已经编辑过了... - Stone Cold
我认为你应该使用带有变量的T-SQL来重写这个查询。 - amrfaissal
https://stackoverflow.com/q/49008514/9331130 - Imad Ullah
1个回答

5
您可以在GROUP BY语句中使用WITH ROLLUP选项,这将会给您提供一个额外的行,其中包含"rolled up"(汇总)的值:
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列,应该为您汇总所有其他列。

“WITH ROLLUP” 不是新的。只有 “GROUPING SETS”。这在 2005 年应该可以正常工作。 - Martin Smith
@MartinSmith:天啊,你说得对,这个MSDN Books Online有时候真的很令人困惑……好吧,更好的是!那么,我的解决方案应该可以在2005年上运行,对吧? :_) - marc_s
仅仅是从SQL Server 2008开始,使用WITH ROLLUPWITH CUBE被不鼓励,而是推荐使用GROUPING SETS()ROLLUP()CUBE()。但是这些语句仍然被支持,所以自然地,在2008版本中查询仍然可以正常工作。 - Andriy M
@marc_s:我已经尝试了rollup和grouping sets,但它们都不起作用。 - Stone Cold
@StoneCold:怎么不工作??它是否给出错误?它是否没有显示额外的行?? - marc_s
谢谢大家,我已经找到了解决方案,与marc_s提供的相同。 - Stone Cold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接