SQL 服务器动态 PIVOT 查询 - 字段顺序
SQL Server dynamic PIVOT query - fields order
关于已解决的问题 SQL Server dynamic PIVOT query?,我试图以相反的顺序在新的 table 中明确排序由类别(ABC、DEF 和 GHI)创建的字段。即,输出 table 现在具有以下字段(数据、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
只需像这样更改列列表(@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 dynamic PIVOT query?,我试图以相反的顺序在新的 table 中明确排序由类别(ABC、DEF 和 GHI)创建的字段。即,输出 table 现在具有以下字段(数据、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
只需像这样更改列列表(@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, '')