SQL动态列
我正在尝试创建动态列并将其插入到临时表中。SQL动态列,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在尝试创建动态列并将其插入到临时表中。 但它抛出一个错误,指出#temp3不是有效的对象名。如果我不尝试将动态生成的列插入到表中,代码就会工作 如果执行代码,然后尝试访问#temp3表,如: select @cols = STUFF((SELECT ',' + QUOTENAME(grade) from #temp group by grade
但它抛出一个错误,指出#temp3不是有效的对象名。如果我不尝试将动态生成的列插入到表中,代码就会工作 如果执行代码,然后尝试访问
#temp3
表,如:
select @cols =
STUFF((SELECT ',' + QUOTENAME(grade)
from #temp
group by grade
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
select @colsRollup = STUFF((SELECT ', Sum(' + QUOTENAME(grade) + ') as '+QUOTENAME (grade)
from #temp
group by grade
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query
= 'SELECT * into #temp3 from
(
SELECT lob as "Vertical", '+ @colsRollup + '
FROM
(
SELECT lob,' + @cols + ' from
(
select lob,
grade,
asso_count
from #temp
) x
pivot
(
count(grade)
for grade in (' + @cols + ')
) p
) x1
GROUP BY lob with ROLLUP)x2'
execute(@query)
我认为它已经超出了范围,这可以解释错误消息。
您可以尝试修改查询以包含SELECT
,如:
execute(@query)
select * from #temp3
注意最后一行现在是如何包含;选择*FROM#temp3
如果您添加,您应该返回结果,如果这是您想要的。mysql或sql server?选择一个并编辑标记。(看起来像sql server)@prasanthunnikrishnan您是如何执行此操作的?以存储过程或其他方式?@jpw:Yup,它作为存储过程执行。
SET @query = '
SELECT * INTO #temp3 FROM
(
SELECT lob as "Vertical", '+ @colsRollup + '
FROM
(
SELECT lob,' + @cols + ' from (select lob, grade, asso_count from #temp) x
PIVOT (count(grade) for grade in (' + @cols + ')) p
) x1
GROUP BY lob with ROLLUP
) x2; SELECT * FROM #temp3'