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中文网其他相关文章!