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
1
2
3
4
5
6
7
SELECT t.id, labels.name,CASE labels.nameWHEN 'Price' THEN t.priceWHEN 'Tax' THEN t.taxEND AS valueFROM items tCROSS 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.