[英]Row and column total in dynamic pivot in MS SQL Server 2008 my questions is row total and columns total) for all products when add
[英]Add Total column to Dynamic SQL pivot
那里有很多此類問題,但找不到與我正在尋找的內容相匹配的任何內容。
我正在使用另一篇文章中運行良好的代碼,但我想修改它以在表格底部添加總計行。
上一篇讓創作者獲得榮譽的帖子是: SQL 服務器動態 pivot 多列
我當前的表格如下所示:
工作組 | 平均 | 2021 年 1 月 1 日 | 2021 年 1 月 1 日 | 2021 年 1 月 1 日 | 等等... |
---|---|---|---|---|---|
藍色的 | 5 | 2 | 5 | 8 | |
綠色的 | 5 | 2 | 5 | 8 |
目標:
工作組 | 平均 | 2021 年 1 月 1 日 | 2021 年 1 月 1 日 | 2021 年 1 月 1 日 | 等等... |
---|---|---|---|---|---|
藍色的 | 5 | 2 | 5 | 8 | |
綠色的 | 5 | 2 | 5 | 8 | |
全部的 | 10 | 4 | 10 | 16 |
當前代碼是:
DECLARE @colsEAST 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
SET @pivotCountEAST = N'SELECT Work_Group, ' + @colsEAST +'
FROM (SELECT Work_Group, Load_Date, Count FROM ##CEtmp_East_ALL) AS Count
PIVOT(SUM(Count) FOR Load_Date IN (' + @colsEAST + ')) AS pvt';
SET @sqlEAST = '; WITH MTD_CountPivot AS (
'+@pivotCountEAST+'
),
MTD_Pivot_Tables AS (
SELECT Work_Group, AVG(Count) AS [AVG Count]
FROM ##CEtmp_East_ALL
GROUP BY Work_Group
)
SELECT MTD_CountPivot.Work_Group, MTD_Pivot_Tables.[AVG Count], ' + @colsEAST + '
FROM
MTD_CountPivot
INNER JOIN MTD_Pivot_Tables ON MTD_CountPivot.Work_Group = MTD_Pivot_Tables.Work_Group';
EXEC sp_executesql @sqlEAST;
任何幫助將不勝感激!!!
謝謝
您可以將GROUPING SETS ((mcp.Work_Group),())
添加到當前查詢以獲取小計。 為此,需要創建另一個參數@colsEAST2
以便將生成的列標題日期列表保存為
SUM([2001-01-01]) AS [2001-01-01],SUM([2001-01-02]) AS [2001-01-02],SUM([2001-01-03]) AS [2001-01-03]
連同持有的@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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.