SQL Server 2005 动态数据透视
在 SQL Server 2005 中,处理列数未知的数据透视操作可能比较棘手。本文探讨解决此类问题的方案。
问题:
如何在 SQL Server 2005 中动态透视列数未知的数据?期望的输出应类似于一个表,其中唯一学生作为行,动态列表示作业,并按截止日期排序。如果可能,"总计"列应出现在最后。
解答:
由于 SQL Server 2005 的限制,可能需要使用动态 SQL 来实现动态透视。一种可能的解决方案是利用动态管理视图 (DMV) 和 XML 生成动态 SQL 语句。
<code class="language-sql">DECLARE @DynamicSQL NVARCHAR(MAX) = N''; -- 从表中获取不同的作业名称 SELECT DISTINCT AssignmentName INTO #AssignmentNames FROM TableName; -- 循环遍历作业名称 SELECT @DynamicSQL = @DynamicSQL + ' MAX(CASE WHEN AssignmentName = ''' + AssignmentName + ''' THEN Grade END) AS ' + AssignmentName + ',' FROM #AssignmentNames; -- 删除动态 SQL 语句末尾的逗号 SET @DynamicSQL = LEFT(@DynamicSQL, LEN(@DynamicSQL) - 1); -- 构造用于透视的最终动态 SQL 语句 SET @DynamicSQL = 'SELECT StudentName, ' + @DynamicSQL + ' FROM TableName GROUP BY StudentName;'; -- 执行动态 SQL 语句 EXEC sp_executesql @DynamicSQL;</code>
此方法生成一个动态 SQL 语句,其中包含根据表中标识的不同作业名称进行透视所需的列。
注意:
虽然此解决方案涉及动态 SQL,但它不会受到注入攻击,因为 SQL 语句是从已知和可信数据构建的。或者,如果数据频繁更改,请考虑实现代码生成以创建具有所需 SQL 语句的存储过程。
以上是如何在 SQL Server 2005 中动态透视未知列的数据?的详细内容。更多信息请关注PHP中文网其他相关文章!