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

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

Barbara Streisand
发布: 2025-01-25 18:56:09
原创
158 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板