Version: Microsoft SQL Server 2014SQL Server: Werte sortieren In LIKE Spalten mit dynamischem Dreh
Ich habe erfolgreich eine dynamische Pivot-Tabelle (mit Hilfe) erstellt, und jetzt habe ich eine Frage in Bezug auf die Spaltennamen und deren Werte .
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)
Nachdem der Tisch geschwenkt wurde, erstellt es 27 Spalten von Component_X
.
Die 27 Spalten sollen verschiedene Arten von Teilen darstellen, die einer eindeutigen UPC-Nummer zugeordnet sind. Nicht alle UPCs haben 27 Arten von Teilen.
Es scheint, dass abhängig davon, welche Zeilennummer das Teil in der partitionierten Gruppe von UPC-Nummern aufgelistet wurde, wo es in der Pivot-Spalte zugewiesen wurde.
Das bedeutet für mich, dass ich die ursprünglichen Daten sortieren muss, bevor ich den Pivot starte, nein? In der folgenden Ergebnistabelle sehen Sie, dass die Teilenummer 543
unter Component_13
, Component_1
und Component_10
für verschiedene UPC-Nummern angezeigt wird.
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
Mein Problem ist, dass ich nicht die Teilenummer erlauben kann zwischen verschiedenen Spalten zu schweben. Wenn die Teilenummer ein "Component_13"
Typ ist, muss sie in dieser Spalte bleiben.
Mein Ziel ist es, jede Iteration von Component_X
eine bestimmte Art von Teil darzustellen.
Component_1 = Bolts
Component_2 = Nuts
Component_3 = Washers
Das andere Problem ist, dass ich müssen auch mehrere „Bolt“ Teilenummern in ihre eigene Spalte für den Abruf durch ein anderes Stück Software aufzuzählen. Jede UPC-Nummer kann eine beliebige Anzahl von "Schrauben" unterschiedlicher Größe mit unterschiedlichen Teilenummern haben.
End Ergebnis Tabelle könnte wie folgt aussehen:
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
Dies ist wahrscheinlich nicht möglich ist, aber ich hatte zu fragen, ob jemand mit einer Lösung helfen könnte.
@marc_s dieses Format erzeugt wird, automatisch von dbfiddle – McNets