SQL: Ergebnismenge einer Pivotisierung in einer Spalte ausgeben
Aus DBWiki
Mittels Pivotisierung wird die gewünschte Zeilenanzahl je Datensatz mit unterschiedlicher Nummer bereitgestellt. In der Hauptabfrage wird über einen CASE-Ausdruck bzw. in Access über Switch() oder IIf() die Nummer ausgewertet und der entsprechende Spaltenwert eingetragen.
Im folgenden sollen diese Mitarbeiter-Informationen in der Abfrage dargestellt werden:
info |
---|
Name: Kühne |
Job: Abteilungsleiter |
Gehalt: 2450 |
(Null) |
Name: König |
Job: Hauptgeschäftsführer |
Gehalt: 5000 |
(Null) |
Name: Müller |
Job: Sachbearbeiter |
Gehalt: 1300 |
(Null) |
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, sowie die Pivottabelle t1000 vorhanden sein.
SELECT Switch( n = 1, 'Name: ' & ma_name, n = 2, 'Job: ' & job, n = 3, 'Gehalt: ' & gehalt) AS info FROM ( SELECT ma_nr, ma_name, job, gehalt, n FROM mitarbeiter, t1000 WHERE abt_nr = 10 AND n BETWEEN 1 AND 4 ) AS v ORDER BY ma_nr, n
Lösung für PostgreSQL
SELECT CASE n WHEN 1 THEN 'Name: ' || ma_name WHEN 2 THEN 'Job: ' || job WHEN 3 THEN 'Gehalt: ' || gehalt END AS info FROM ( SELECT ma_name, job, gehalt, ROW_NUMBER() OVER ( PARTITION BY ma_nr ORDER BY ma_nr ) AS n FROM mitarbeiter, generate_series( 0, 3 ) -- 4 Zeilen erzeugen WHERE abt_nr = 10 ) AS v
Hier ist ein entsprechender DBFiddle.