Tsql 如何将动态透视变量输出保存为SQL Server表
通过使用动态SQL创建具有动态创建的列名的透视表,我已经成功地构建了我一直在寻找的输出 我的代码是:Tsql 如何将动态透视变量输出保存为SQL Server表,tsql,sql-server-2005,variables,pivot,Tsql,Sql Server 2005,Variables,Pivot,通过使用动态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') I
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+'附近的语法不正确”:
非常感谢。在您现有的代码中,将您的
添加到此行中:
SET @query = 'SELECT * FROM #TempDB AS PivotData '
因此,您可以:
SET @query = 'SELECT * INTO #TempDB4 FROM #TempDB AS PivotData '
或者以相同的方式添加插入
要使未成功的查询按预期工作,您必须将其转换为动态SQL,就像成功的查询一样,并使用exec
或sp_executesql
来调用它。非常感谢您的帮助。你不知道谷歌有多少次没能想出这个简单的解决方案。很好用!
SET @query = 'SELECT * INTO #TempDB4 FROM #TempDB AS PivotData '