![](/img/trans.png)
[英]How to insert dynamic pivot output result into temp table in SQL server?
[英]How To Save Dynamic Pivot Variable Output As SQL Server Table
我已经成功构建了我一直在寻找的输出,使用动态 SQL 创建一个带有动态创建的列名的数据透视表。
我的代码是:
IF OBJECT_ID('tempdb..#TempDB') IS NOT NULL
DROP TABLE #TempDB
SELECT CASEID, FORMNAME, NAME, VALUE INTO #TempDB FROM dbo.EFORM WHERE FORMNAME='IncidentReporting'
IF OBJECT_ID('tempdb..#TempDB1') IS NOT NULL
DROP TABLE #TempDB1
SELECT DISTINCT Name INTO #TempDB1 FROM #TempDB
DECLARE @columns varchar(max)
DECLARE @query varchar(max)
SELECT @columns = COALESCE(@columns + ',[' + cast([Name] as varchar(100)) + ']',
'[' + cast([Name] as varchar(100))+ ']')
FROM #TempDB1
SET @query = 'SELECT * FROM #TempDB AS PivotData '
SET @query = @query +
'PIVOT (MAX(VALUE) FOR [NAME] IN (' + @columns + ')) AS p'
EXEC (@query)
这成功地给了我这样的结果:
CASEID FORMNAME Column1 Column2 Column3
501000000621 IncidentReporting Value1 Valuea Valuev
501000000622 IncidentReporting Value2 Valueb Valuew
601000000126 IncidentReporting Value3 Valuec Valuex
601000000127 IncidentReporting Value4 Valued Valuey
601000000128 IncidentReporting Value5 Valuee Valuez
从@query 变量输出的这些结果正是我想要这些结果的表格的格式。
谁能告诉我如何将 @query 变量中的结果放入标准 SQL 表中?
我试过做这样的语句,但我收到消息“' + @columns + ' 附近的语法不正确”:
SELECT *
INTO #TempDB4
FROM (SELECT * FROM #TempDB AS PivotData
PIVOT (MAX(VALUE) FOR [NAME] IN (' + @columns + ')) AS p)
提前谢谢了。
在现有的代码,添加into
该行:
SET @query = 'SELECT * FROM #TempDB AS PivotData '
以便您获得:
SET @query = 'SELECT * INTO #TempDB4 FROM #TempDB AS PivotData '
或者以同样的方式添加insert
。
为了让不成功的查询按预期工作,您必须将其转换为动态 SQL,就像您的成功查询一样,并使用exec
或sp_executesql
调用它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.