SQL Server 动态 PIVOT 查询 - 字段顺序

Posted

技术标签:

【中文标题】SQL Server 动态 PIVOT 查询 - 字段顺序【英文标题】:SQL Server dynamic PIVOT query - fields order 【发布时间】:2016-02-09 15:32:12 【问题描述】:

参考已解决的问题SQL Server dynamic PIVOT query?,我正在尝试以相反的顺序在新表中明确排序由类别(ABC、DEF 和 GHI)创建的字段。即,输出表现在有以下字段(数据、ABC、DEF、GHI),我想获取(数据、GHI、DEF、ABC)。

非常感谢 D.

  create table temp
(
    date datetime,
    category varchar(3),
    amount money
)

insert into temp values ('1/1/2012', 'ABC', 1000.00)
insert into temp values ('2/1/2012', 'DEF', 500.00)
insert into temp values ('2/1/2012', 'GHI', 800.00)
insert into temp values ('2/10/2012', 'DEF', 700.00)
insert into temp values ('3/1/2012', 'ABC', 1100.00)


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 '


execute(@query)

drop table temp

【问题讨论】:

【参考方案1】:

只需像这样更改列列表(@cols

SET @cols = Stuff((SELECT DISTINCT ',' + Quotename(c.category)
                   FROM   temp c
                   ORDER  BY ',' + Quotename(c.category) DESC
                   FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') 

【讨论】:

以上是关于SQL Server 动态 PIVOT 查询 - 字段顺序的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server中Pivot()函数实现动态行转列

SQL Server 动态 Pivot 为每个类别返回一行

将 Access TRANSFORM/PIVOT 查询转换为 SQL Server

SQL Server - 使用 PIVOT 查询比较 2 个表中的字段

具有 group by 和/或 distinct 和 pivot 的复杂 SQL Server 查询

SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句