ピボットテーブルの列名で動的に作成する優れたスクリプトを見つけましたが、割り当てられた値をテーブルに戻せません。これが私のスターティングテーブルです。
ORDER_ID DSC_NAME NAME
----------- --------------- -----------
2 34-1500-XXX DWG_DOC
3 C0403 EQIP_1
4 C4054 EQIP_2
1 34-1500-013 PART
0 88-0000 PRCS
このSQLを実行して、ピボットテーブルに必要な列を生成します
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct
',' + QUOTENAME(NAME)
FROM test
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
これにより、次の出力が得られます
[DWG_DOC],[EQIP_1],[EQIP_2],[PART],[PRCS]
ピボットテーブルの動的SQLを実行すると
SET @query = 'SELECT ' + @cols + ' from
(
SELECT ORDER_ID,DSC_NAME
FROM test
) x
pivot
(
MIN(ORDER_ID)
for DSC_NAME in (' + @cols + ')
) p '
execute(@query)
この結果が表示されます...
DWG_DOC EQIP_1 EQIP_2 PART PRCS
----------- ----------- ----------- ----------- -----------
NULL NULL NULL NULL NULL
私はいくつかの異なるオプションを試しましたが、これが機能しない理由の解決策を思いつきません。
必要な出力は、列の順序がORDER_IDによって正しい場所になります
PRCS PART DWG_DOC EQIP_1 EQIP_2
---------- -------------- -------------- --------- ---------
88-0000 34-1500-013 34-1500-XXX C0403 C4054
しかし、これは私のアプリケーションでも機能します。
DWG_DOC EQIP_1 EQIP_2 PART PRCS
-------------- --------- --------- -------------- -----------
34-1500-XXX C0403 C4054 34-1500-013 88-0000