[英]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.