1

動的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)

よろしくお願いします。

4

1 に答える 1

2

既存のコードで、次のinto行に追加します。

SET @query = 'SELECT * FROM #TempDB AS PivotData '

あなたが得るように:

SET @query = 'SELECT * INTO #TempDB4 FROM #TempDB AS PivotData '

insertまたは、同じ方法で追加します。

失敗したクエリを期待どおりに機能させるには、成功したクエリと同じように、それを動的 SQL に変換し、execまたはを使用して呼び出す必要があります。sp_executesql

于 2012-11-16T16:02:57.190 に答える