将SQL代码(作为字符串)转换为表动态枢轴



我使用了下面的SQL脚本来执行动态透视。我想使用结果左连接到另一个表,但是"INTO"方法似乎不适用于表变量@query。它显示了一个错误:

必须声明表变量"@query">

如果我像这样直接连接表:LEFT join @query。我应该如何保存@query以便左连接到另一个表?谢谢!

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

我想明白了。解决方案是在字符串sql脚本中添加##result,如下所示:

set @query = 'SELECT date, ' + @cols + ' ##result from 
(
select date
, amount
, category
from temp
) x
pivot 
(
max(amount)
for category in (' + @cols + ')
) p '
select * from ##result

最新更新