使用动态查询在SQL Server中动态透视数据
本文介绍如何将日期、类别和金额列的数据转换为更结构化的格式,按日期和类别分组金额。
为此,可以使用动态透视查询。透视是SQL Server的一个函数,允许您将表的行旋转为列。在本例中,透视点是日期列,生成的列将是类别。
<code class="language-sql">DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);</code>
为了构建动态透视查询,我们首先定义两个变量:@cols
用于保存类别,@query
用于存储最终查询。
<code class="language-sql">SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.category) FROM temp c FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'')</code>
接下来,我们通过用逗号连接不同的类别来构建@cols
变量,确保它们用双引号括起来。
<code class="language-sql">set @query = 'SELECT date, ' + @cols + ' from ( select date , amount , category from temp ) x pivot ( max(amount) for category in (' + @cols + ') ) p '</code>
最后,我们将查询字符串赋值给@query
。该查询首先选择日期列和所有类别作为列。然后,它使用PIVOT旋转数据,以日期列作为行标题,类别作为列标题。
<code class="language-sql">execute(@query)</code>
执行@query
将返回所需的结果,根据需要透视数据。
<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中文网其他相关文章!