版本:微軟SQL服務器2014的SQL Server:排序值到動態透視LIKE列
我已經成功地創建一個動態的數據透視表(有幫助),現在我有一個關於列名和它們的值的問題。
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)
表格旋轉後,它創建了27列Component_X
。
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這個格式由dbfiddle自動生成 – McNets