SQL Server动态透视查询
本文介绍如何将数据集从垂直格式转换为水平格式,以类别为列,日期为行。这通常使用PIVOT运算符来实现。
以下SQL代码在一个名为temp
的临时表中初始化数据集。动态SQL用于构建PIVOT查询。@cols
变量将不同的类别连接成逗号分隔的字符串。@query
变量构建实际的PIVOT查询,按日期分组并根据类别进行透视。
<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.category) FROM temp c FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT date, ' + @cols + ' from ( select date , amount , category from temp ) x pivot ( max(amount) for category in (' + @cols + ') ) p '</code>
执行此查询将产生所需的结果:
<code>日期 ABC DEF GHI 2012-01-01 00:00:00.000 1000.00 NULL NULL 2012-02-01 00:00:00.000 NULL 500.00 800.00 2012-02-10 00:00:00.000 NULL 700.00 NULL 2012-03-01 00:00:00.000 1100.00 NULL NULL</code>
这种动态方法允许根据需要调整类别,而无需更改查询结构。请记住在使用后删除临时表,以避免性能问题。
以上是如何在 SQL Server 中动态透视数据?的详细内容。更多信息请关注PHP中文网其他相关文章!