capypad
0 Tage Serie
sql / expert
Snippet

Unpivoting von Attributen durch kartesisches Produkt und CASE

Unpivoting transformiert mehrere Attributspalten in ein standardisiertes, zeilenbasiertes Format. Diese ANSI-konforme Methode nutzt einen CROSS JOIN zu einer virtuellen Label-Tabelle, um jede Quellzeile zu duplizieren, und verwendet dann einen CASE-Ausdruck, um den entsprechenden Spaltenwert für jedes Label auszuwählen.

snippet.sql
sql
1
2
3
4
5
6
7
SELECT t.id, labels.name,
CASE labels.name
WHEN 'Price' THEN t.price
WHEN 'Tax' THEN t.tax
END AS value
FROM items t
CROSS JOIN (SELECT 'Price' AS name UNION ALL SELECT 'Tax') AS labels;
Erklärung
1
CROSS JOIN (SELECT 'Price' AS name ...)
Multipliziert jede Quellzeile mit der Anzahl der Attribute, die unpivoted werden.
2
CASE labels.name WHEN 'Price' THEN t.price ...
Ordnet das virtuelle Label wieder dem tatsächlichen Spaltenwert aus der Quelltabelle zu.
3
END AS value
Projiziert den resultierenden Attributwert in eine einzige Spalte.