SQL Server 2005 中處理未知列數的資料透視
本文探討在 SQL Server 2005 中處理未知列數資料的透視難題。給定的資料集包含表示作業和成績的變數列,期望的輸出是透視表,包含作業列和學生總分。
由於 SQL Server 2005 的限制,此任務無法使用純 SQL(無動態 SQL)解決方案。如同建議的答案中所提到的,動態 SQL 提供了一種根據目前資料動態產生必要語句的方法。
例如,如果名為 Assignments 的表包含作業名稱和截止日期:
<code class="language-sql">CREATE TABLE Assignments ( ID int NOT NULL, AssignmentName varchar(50) NOT NULL, DueDate datetime );</code>
以及數據:
<code class="language-sql">INSERT INTO Assignments (ID, AssignmentName, DueDate) VALUES (1, 'Assignment 1', '2023-03-01'), (2, 'Assignment 2', '2023-04-01'), (3, 'Assignment 3', '2023-05-01');</code>
可以使用下列動態 SQL 產生所需的輸出:
<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); SET @cols = (SELECT STUFF(( SELECT ',[' + AssignmentName + ']' FROM Assignments FOR XML PATH(''), TYPE ), 1, 1, '')); SET @query = 'SELECT StudentName, ' + @cols + ', SUM(Grade) OVER (PARTITION BY StudentName) AS Total FROM (SELECT StudentName, AssignmentName, CASE WHEN AssignmentName = ''Total'' THEN NULL ELSE Grade END AS Grade FROM YourTable) AS t PIVOT (MAX(Grade) FOR AssignmentName IN (' + @cols + ')) AS pvt'; EXECUTE(@query);</code>
這將建立一個包含作業列和學生總分的透視表,並按截止日期排序(如果表中存在 DueDate 列)。
以上是如何在 SQL Server 2005 中透視列數未知的資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!