将 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',700.00)
insert into temp values ('3/1/2012',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,'')

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...