バージョン動的なピボットとLIKEの列に値。SQL Serverの:私は成功した(助けを借りて)動的なピボットテーブルを作成している、と今私は、列名とその値に関する質問があるのMicrosoft SQL Serverの2014</p> <p>:ソート
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT distinct ','
+ QUOTENAME('Component_' + cast(rn as varchar(10)))
FROM dbo.table
CROSS APPLY
(SELECT row_number() over(partition by UPC order by ComponentNum) rn
FROM dbo.table) x
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query = 'SELECT UPC, ' + @cols + ' FROM
(
SELECT UPC, ComponentNum,
''Component_''
+ cast(row_number() over(partition by UPC order by ComponentNum) as varchar(10)) val
FROM dbo.table) x
PIVOT
(
MAX(ComponentNum)
FOR val IN (' + @cols + ')
) p '
execute(@query)
テーブルがピボットされた後、Component_X
の27個の列が作成されました。
27個の列は、一意のUPC番号に関連付けられた異なる種類の部分を表すものとします。すべてのUPCに27種類の部品があるわけではありません。
パーツがUPC番号の区切られたグループに記載されている行番号によって、ピボット列に割り当てられた場所が変わっているようです。
これは、ピボットを実行する前に元のデータを並べ替える必要があることを示しています。下の結果表を見ると、異なるUPC番号に対して、部品番号543
がComponent_13
、Component_1
、およびComponent_10
の下に表示されていることがわかります。
ID UPC Component_13 Component_1 Component_10
------------------------------------------------------------------------
1 123 543 NULL 345
2 321 345 543 765
3 213 654 345 NULL
4 312 765 NULL 543
私の問題は、部品番号を異なる列間で浮動させることができないということです。部品番号が"Component_13"
の場合は、その列にとどまる必要があります。
私の目標は、Component_X
の各反復を特定の種類の部分にすることです。
Component_1 = Bolts
Component_2 = Nuts
Component_3 = Washers
他の問題は、私はまた、別のソフトウェアでの検索のために、独自の列に複数の「ボルト」の部品番号を列挙する必要があるということです。 UPC番号は、部品番号の異なるさまざまなサイズの「ボルト」をいくつでも持つことができます。
最終結果表は次のようになります。
ID UPC Bolt1 Bolt2 Bolt3 Nut1 Nut2
------------------------------------------------------------------------
1 123 1.5 1 NULL 0.5 .375
2 321 2.0 NULL NULL .625 NULL
3 213 0.25 .875 .375 NULL NULL
4 312 NULL NULL NULL 1.25 .625
これはおそらく不可能ですが、私は誰もが解決のお手伝いができればお願いしました。
@marc_s – McNets