Ingo: PIVOT Funktion in MS SQL nutzen, ich bekomme es nicht hin

Hallo,

ich habe folgende Tabellenstruktur:

IP  |  SN  | gelb 0 | rot 0 | gelb 1 | rot 1
_____________________________________________

1     12345    50       50     40        0

Die Tabelle soll aber wie folgt angezeigt werden

SN    |  12345
_______________

gelb 0 | 50

rot 0  | 50

gelb 1 | 40

rot 1  | 0

die Pivot funktion kapier ich nicht. Ich bekomme es einfach nicht hin.

Wer kann mir helfen?

Danke

  1. Hallo Ingo,

    was Du da willst, ist ja auch kein PIVOT, sondern das Gegenteil: auf Spalten verteilte Attribute zeilenweise auflisten. Dazu gibt's die UNPIVOT Klausel im SELECT.

    Guck mal hier: https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot - das Beispiel für UNPIVOT ist ganz am Ende.

    In deinem Fall müsste es in etwa so aussehen:

    SELECT Feld, Wert
    FROM   
       (SELECT Sn, gelb0, rot0, gelb1, rot1 FROM mytable WHERE IP=1) t
    UNPIVOT  
       (Wert FOR Feld IN (Sn, gelb0,rot0, gelb1,rot1)) as unpvt
    

    Hinweise:

    • mytable musst Du durch den Manem deiner Tabelle ersetzen
    • Deine Tabellenstruktur habe ich möglicherweise falsch verstanden. Hast Du tatsächlich Leerstellen in Spaltennamen?
    • Ungetestet, nur auf Grund der MS Doc gebastelt.

    Wenn's nicht klappt, viel Glück mit dem Link. Mehr als dort steht weiß ich auch nicht.

    Die IP kannst Du auch in die Query durchreichen:

    SELECT IP, Feld, Wert
    FROM   
       (SELECT IP, Sn, gelb0, rot0, gelb1, rot1 FROM mytable WHERE IP=1) t
    UNPIVOT  
       (Wert FOR Feld IN (Sn, gelb0,rot0, gelb1,rot1)) as unpvt
    

    Rolf

    --
    sumpsi - posui - clusi
    1. Hallo Rolf,

      Danke. Nein die Spaltennamen haben kein Leerzeichen, sorry.

      Was meinst Du mit "Feld"

      1. Hallo Ingo,

        äh, was meinst Du mit der Frage? „Feld“ ist die Übersetzung des englischen Begriffs „field“; ich hätte vielleicht besser „Spalte“ geschrieben...

        Rolf

        --
        sumpsi - posui - clusi