【问题标题】:Show a sum of the column at the end of the column in mssql 2008在 mssql 2008 的列末尾显示列的总和
【发布时间】:2013-02-18 18:30:55
【问题描述】:

在 MsSQL 2008 中,我试图在其末尾显示 3 个不同列的总和。

目前我的查询返回

这是由(@grouping = maingroup,subgroup,subsubgroup,season,vendorid,[01] as '01',[02] as '02',Total)选择的

set @sql = 'select '+@grouping+' from ##aa'
execute sp_executesql @sql

我需要在各自列的末尾加上 01,02 和 Total。我试过使用汇总,但这并没有给我正确的结果。可能只是做错了,但是 select 语句必须是什么样子才能得到我需要的?

【问题讨论】:

    标签: sql-server-2008 dynamic-sql rollup


    【解决方案1】:

    有两种方法可以做到这一点。第一种是旧的 pre sql-server-2008 方法是使用UNION ALL,第一个SELECT 返回表中的原始数据,第二个返回 01、02 和 Total 字段的总和:

    SELECT   maingroup,
             subgroup,
             subsubgroup,
             season,
             vendorid,
             [01] AS '01',
             [02] AS '02',
             Total AS Total
    FROM     #aa
    UNION ALL
    SELECT   null as maingroup,
             null as subgroup,
             null as subsubgroup,
             null as season,
             null as vendorid,
             sum([01]) AS '01',
             sum([02]) AS '02',
             sum(Total) AS Total
    FROM     #aa
    

    在 sql-server-2008 及更高版本中,您可以使用 GROUPING SETS 来代替。使用GROUPING SETS 对上述查询的等效查询是:

    SELECT   maingroup,
             subgroup,
             subsubgroup,
             season,
             vendorid,
             sum([01]) AS '01',
             sum([02]) AS '02',
             sum(Total) AS Total
    FROM     #aa
    GROUP BY GROUPING SETS((maingroup, subgroup, subsubgroup, season, vendorid), ())
    

    两者都应该返回:

    GROUPING SETS EquivalentsUsing GROUP BY with ROLLUP, CUBE, and GROUPING SETS 是另外两个来源,提供了有关使用 GROUPING SETS 的良好信息

    【讨论】:

    • 谢谢,现在我只需要找到一种方法将这些空值设为空字符串或空白,但保留十进制。还有没有办法让最后一行中的 NULL 也为空?
    【解决方案2】:
    Select maingroup, subgroup, subsubgroup, season, vendorid, sum([01]) as '01', sum([02]) as '02', sum(Total)
    FROM ##aa
    Group by grouping sets ((maingroup, subgroup, subsubgroup, season, vendorid),())
    

    最后一个条目将是除 01、02 和总计之外的所有列中为 NULL 的行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      相关资源
      最近更新 更多