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)
我正在尝试创建动态列并将其插入临时表中。 但是它会抛出一个错误,说#temp3不是有效的对象名。如果我不尝试将动态生成的列插入表中,代码将起作用。
答案 0 :(得分:1)
如果您执行代码,然后尝试访问#temp3
表,如:
execute(@query)
select * from #temp3
我认为它将超出范围,这将解释错误消息。
您可以尝试修改查询以包含SELECT
之类的内容:
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'
请注意最后一行现在包含; SELECT * FROM #temp3
如果你添加,你应该得到结果,如果这是你想要的。