SQL: Ergebnismenge einer Pivotisierung zurückwandeln

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Für die Umwandlung von Spalten in Zeilen kann man ein kartesisches Produkt verwenden. Im Voraus muss bekannt sein, wieviele Spalten einzubeziehen sind, weil wir mindestens soviele Zeilen im Ausdruck bereitstellen müssen.


Als Basis für das Beispiel verwenden wir das Ergebnis aus Ergebnismenge in einer Zeile darstellen unter dem Namen vw_abt_ma_cnt_pvt.

Lösung für Jet-SQL

Hinweis für Access-Anwender
Um die folgenden Abfragen selbst testen zu können, müssen die Tabellen der Übungsdatenbank vorhanden sein.

SELECT abt_nr,
       Switch( abt_nr = 10, abt_10,
               abt_nr = 20, abt_20,
               abt_nr = 30, abt_30) AS anz_ma
FROM   vw_abt_ma_cnt_pvt,
       ( SELECT abt_nr
         FROM   abteilung
         WHERE  abt_nr < 40 ) AS a

Allgemeine Lösung

SELECT abt_nr,
       CASE abt_nr WHEN 10 THEN abt_10 
                   WHEN 20 THEN abt_20
                   WHEN 30 THEN abt_30 END AS anz_ma
FROM   vw_abt_ma_cnt_pvt,
       ( SELECT abt_nr
         FROM   abteilung
         WHERE  abt_nr < 40 ) AS a

Hier ist ein entsprechender DBFiddle.

Lösung für PostgreSQL mittels unnest()

SELECT unnest( array( SELECT abt_nr
                      FROM   abteilung
                      WHERE  abt_nr < 40 ) ) AS abt_nr,
       unnest( array[ abt_10, abt_20, abt_30 ] ) AS anz_ma
FROM   vw_abt_ma_cnt_pvt

Hier ist ein entsprechender DBFiddle.

abt_nr anz_ma
10 3
20 5
30 6



Zurück zur Übersicht