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
InformationsquelleAutor jlimited | 2013-02-23
Schreibe einen Kommentar