将总计列添加到动态SQL数据透视
有很多这样的问题,但找不到任何符合我所寻找的 我正在使用另一篇文章中的代码,它工作得很好,但是我想修改它,在表的底部添加一个totals行 前一篇文章是为了让创建者获得学分: 我当前的表如下所示: 工作组 平均值 01/01/2021 01/01/2021 01/01/2021 发射型计算机断层扫描仪。。。 蓝色 5. 2. 5. 8. 绿色 5. 2. 5. 8.将总计列添加到动态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
您可以向当前查询添加分组集((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