首页 >数据库 >mysql教程 >如何使用动态查询动态透视 SQL Server 中的数据?

如何使用动态查询动态透视 SQL Server 中的数据?

Barbara Streisand
Barbara Streisand原创
2025-01-25 18:56:09166浏览

How to Dynamically Pivot Data in SQL Server Using a Dynamic Query?

使用动态查询在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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn