Dynamische SQL-Server-Pivot-Tabelle
Fand ich ein nettes script dynamisch erstellt, indem Sie den Spaltennamen für meine pivot-Tabelle, aber ich bin nicht immer die zugewiesenen Werte zurück in die Tabelle. Hier ist mein Tisch.
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
Ich dieses SQL für die Erstellung meiner Spalten, ich möchte in meiner pivot-Tabelle
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,'')
Dieser gibt mir folgende Ausgabe
[DWG_DOC],[EQIP_1],[EQIP_2],[PART],[PRCS]
Wenn ich den dynamic SQL für die Pivot-Tabelle
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)
Sehe ich das Ergebnis...
DWG_DOC EQIP_1 EQIP_2 PART PRCS
----------- ----------- ----------- ----------- -----------
NULL NULL NULL NULL NULL
Ich habe versucht, verschiedene Optionen, aber ich nicht kommen mit einer Lösung, warum das nicht funktioniert.
Gewünschte Ausgabe wäre, wenn die Reihenfolge der Spalten ist korrekt, durch die ORDER_ID
PRCS PART DWG_DOC EQIP_1 EQIP_2
---------- -------------- -------------- --------- ---------
88-0000 34-1500-013 34-1500-XXX C0403 C4054
Aber auch das würde meine Anwendung so gut.
DWG_DOC EQIP_1 EQIP_2 PART PRCS
-------------- --------- --------- -------------- -----------
34-1500-XXX C0403 C4054 34-1500-013 88-0000
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entfernen Sie die
ORDER_ID
von der Auswahl, und wählen Sie die Spaltename
:Und verwenden
MAX(DSC_Name)
stattMIN(ORDER_ID)
. Wie diese:SQL Fiddle Demo
Dadurch erhalten Sie: