将 SQL 代码(作为字符串)转换为 table - 动态枢轴
Convert SQL code (as string) into table - dynamic pivot
我使用下面的 SQL 脚本来执行动态数据透视。我想使用结果左连接到另一个 table,但“INTO”方法似乎不适用于 table 变量 @query。它显示错误:
Must declare the table variable "@query"
如果我像这样直接加入 table:LEFT JOIN @query。
我应该如何保存 @query 以便在另一个 table 上左联?谢谢!
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
我使用下面的 SQL 脚本来执行动态数据透视。我想使用结果左连接到另一个 table,但“INTO”方法似乎不适用于 table 变量 @query。它显示错误:
Must declare the table variable "@query"
如果我像这样直接加入 table:LEFT JOIN @query。 我应该如何保存 @query 以便在另一个 table 上左联?谢谢!
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