将总计列添加到动态SQL数据透视

将总计列添加到动态SQL数据透视,sql,sql-server,pivot,sql-server-2016,subtotal,Sql,Sql Server,Pivot,Sql Server 2016,Subtotal,有很多这样的问题,但找不到任何符合我所寻找的 我正在使用另一篇文章中的代码,它工作得很好,但是我想修改它,在表的底部添加一个totals行 前一篇文章是为了让创建者获得学分: 我当前的表如下所示: 工作组 平均值 01/01/2021 01/01/2021 01/01/2021 发射型计算机断层扫描仪。。。 蓝色 5. 2. 5. 8. 绿色 5. 2. 5. 8. 您可以向当前查询添加分组集((mcp.Work\u Group),()),以获取小计。为此,需要创建另一个参数@colsEAST2

有很多这样的问题,但找不到任何符合我所寻找的

我正在使用另一篇文章中的代码,它工作得很好,但是我想修改它,在表的底部添加一个totals行

前一篇文章是为了让创建者获得学分:

我当前的表如下所示:

工作组 平均值 01/01/2021 01/01/2021 01/01/2021 发射型计算机断层扫描仪。。。 蓝色 5. 2. 5. 8. 绿色 5. 2. 5. 8.
您可以向当前查询添加分组集((mcp.Work\u Group),()),以获取小计。为此,需要创建另一个参数
@colsEAST2
,以便将生成的列标题日期列表保存为

SUM([2001-01-01])作为[2001-01-01],SUM([2001-01-02])作为[2001-01-02],SUM([2001-01-03])作为[2001-01-03]

DECLARE @colsEAST       AS NVARCHAR(MAX);
DECLARE @colsEAST2      AS NVARCHAR(MAX);
DECLARE @pivotCountEAST AS NVARCHAR(MAX);
DECLARE @sqlEAST        AS NVARCHAR(MAX);

SELECT @colsEAST = ISNULL(@colsEAST + ', ', '') + QUOTENAME(Load_Date)
  FROM (SELECT DISTINCT Load_Date 
          FROM ##CE_tmpEast_ALL) AS Load_Date;    
SELECT @colsEAST2 = ISNULL(@colsEAST2 + ', ', '') 
                + ' SUM('+QUOTENAME(Load_Date)+') AS '+QUOTENAME(Load_Date)
  FROM (SELECT DISTINCT Load_Date 
          FROM ##CE_tmpEast_ALL) AS Load_Date;    
SET @pivotCountEAST = N'SELECT Work_Group, ' + @colsEAST2 +'
                          FROM (SELECT Work_Group, Load_Date, Count 
                                  FROM ##CE_tmpEast_ALL) AS Count
                         PIVOT(SUM(Count) FOR Load_Date IN (' + @colsEAST + ')) AS pvt
                         GROUP BY Work_Group';                             
SET @sqlEAST = '; WITH MTD_CountPivot AS (
'+@pivotCountEAST+'
), MTD_Pivot_Tables AS (
  SELECT Work_Group, AVG(Count) AS [AVG Count]
    FROM ##CE_tmpEast_ALL
   GROUP BY Work_Group
)
SELECT CASE WHEN GROUPING(mcp.Work_Group) = 0 
            THEN mcp.Work_Group 
            ELSE ''TOTAL'' 
             END AS Work_Group,
       SUM(mpt.[AVG Count]) AS Avg, 
       ' + @colsEAST2+ '
  FROM MTD_CountPivot mcp
  JOIN MTD_Pivot_Tables mpt 
    ON mcp.Work_Group = mpt.Work_Group
 GROUP BY GROUPING SETS ((mcp.Work_Group),())';    
EXEC sp_executesql @sqlEAST;
连同持有的
@colsEAST

[2001-01-01]、[2001-01-02]、[2001-01-03]

DECLARE @colsEAST       AS NVARCHAR(MAX);
DECLARE @colsEAST2      AS NVARCHAR(MAX);
DECLARE @pivotCountEAST AS NVARCHAR(MAX);
DECLARE @sqlEAST        AS NVARCHAR(MAX);

SELECT @colsEAST = ISNULL(@colsEAST + ', ', '') + QUOTENAME(Load_Date)
  FROM (SELECT DISTINCT Load_Date 
          FROM ##CE_tmpEast_ALL) AS Load_Date;    
SELECT @colsEAST2 = ISNULL(@colsEAST2 + ', ', '') 
                + ' SUM('+QUOTENAME(Load_Date)+') AS '+QUOTENAME(Load_Date)
  FROM (SELECT DISTINCT Load_Date 
          FROM ##CE_tmpEast_ALL) AS Load_Date;    
SET @pivotCountEAST = N'SELECT Work_Group, ' + @colsEAST2 +'
                          FROM (SELECT Work_Group, Load_Date, Count 
                                  FROM ##CE_tmpEast_ALL) AS Count
                         PIVOT(SUM(Count) FOR Load_Date IN (' + @colsEAST + ')) AS pvt
                         GROUP BY Work_Group';                             
SET @sqlEAST = '; WITH MTD_CountPivot AS (
'+@pivotCountEAST+'
), MTD_Pivot_Tables AS (
  SELECT Work_Group, AVG(Count) AS [AVG Count]
    FROM ##CE_tmpEast_ALL
   GROUP BY Work_Group
)
SELECT CASE WHEN GROUPING(mcp.Work_Group) = 0 
            THEN mcp.Work_Group 
            ELSE ''TOTAL'' 
             END AS Work_Group,
       SUM(mpt.[AVG Count]) AS Avg, 
       ' + @colsEAST2+ '
  FROM MTD_CountPivot mcp
  JOIN MTD_Pivot_Tables mpt 
    ON mcp.Work_Group = mpt.Work_Group
 GROUP BY GROUPING SETS ((mcp.Work_Group),())';    
EXEC sp_executesql @sqlEAST;

是否将union all添加到输入表?使用group by(在虚拟列上)+Sum,这非常有效-谢谢!不客气@S Stef