[英]SQL Server Pivot With Grand Total For Row And Column Sorting Issue In Left Side Data
使用以下查询获取 SQL Server 数据透视表中行和列的总计,按预期工作。
但问题是问题号不是按升序到降序或降序到升序排序。
改变这个
ORDER BY sQtnNo asc
上升/下降没有任何影响。
/* COLUMNS HEADERS */
DECLARE @columnHeaders NVARCHAR (MAX)
SELECT @columnHeaders = COALESCE (@columnHeaders
+ ',[' + sAnsText + ']', '[' + sAnsText + ']')
FROM tblEntries
GROUP BY sAnsText
ORDER BY sAnsText
/* GRAND TOTAL COLUMN */
DECLARE @GrandTotalCol NVARCHAR (MAX)
SELECT @GrandTotalCol = COALESCE (@GrandTotalCol + 'ISNULL ([' +
CAST (sAnsText AS VARCHAR) +'],0) + ', 'ISNULL([' + CAST(sAnsText AS VARCHAR)+ '],0) + ')
FROM tblEntries
GROUP BY sAnsText
ORDER BY sAnsText
SET @GrandTotalCol = LEFT (@GrandTotalCol, LEN (@GrandTotalCol)-1)
/* GRAND TOTAL ROW */
DECLARE @GrandTotalRow NVARCHAR(MAX)
SELECT @GrandTotalRow = COALESCE(@GrandTotalRow + ',ISNULL(SUM([' +
CAST(sAnsText AS VARCHAR)+']),0)', 'ISNULL(SUM([' + CAST(sAnsText AS VARCHAR)+']),0)')
FROM tblEntries
GROUP BY sAnsText
ORDER BY sAnsText
----------------------------------------------
-- DROP TABLE temp_MatchesTotal
/* MAIN QUERY */
DECLARE @FinalQuery NVARCHAR (MAX)
SET @FinalQuery = 'SELECT *, (' + @GrandTotalCol + ')
AS [Grand Total] INTO #temp_MatchesTotal
FROM
(SELECT sQtnNo as ''Sort'',sQtnNo ,sAnsText,1 as ''Qty''
FROM tblEntries
) A
PIVOT
(
sum (Qty)
FOR sAnsText
IN (' +@columnHeaders + ')
) B
ORDER BY sQtnNo asc
SELECT * FROM #temp_MatchesTotal
UNION ALL
SELECT ''Grand Total'','''','+@GrandTotalRow +',
ISNULL (SUM([Grand Total]),0) FROM #temp_MatchesTotal
DROP TABLE #temp_MatchesTotal'
-- PRINT 'Pivot Query '+@FinalQuery
-- SELECT @FinalQuery
EXECUTE(@FinalQuery)
结果如下
任何建议都会非常有帮助。
提前致谢。
使用 Try_Convert() 时出现以下错误
就像注释中的帮助一样,您的列是varchar
,并且字符串的顺序与数值的顺序不同。 '14'
具有比更低的值'2'
和'99'
具有比大的值'843657365476547362'
。
如果您希望您的列像数值一样排序,则需要将它们视为数值:
ORDER BY CASE Sort WHEN 'Grand Total' THEN 1 ELSE 0 END ASC, --Put Grand Total at the bottom
TRY_CONVERT(int,Sort) ASC;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.