Verwenden von CASE WHEN und SUM() zum Pivotieren einer Spalte in SQL
Die Datentransformation erfordert häufig die Umgestaltung von Tabellen und das Verschieben von Daten aus Zeilen in Spalten – ein Vorgang, der als Pivotieren bezeichnet wird. Dieses Beispiel zeigt, wie eine Spalte in SQL mit CASE WHEN
und SUM()
.
Betrachten wir eine Beispieltabelle mit dem Namen „Bank“:
<code class="language-sql">Bank: name val amount John 1 2000 Peter 1 1999 Peter 2 1854 John 2 1888</code>
Unser Ziel ist es, diese Tabelle in das folgende Format umzuwandeln:
<code class="language-sql">name amountVal1 amountVal2 John 2000 1888 Peter 1999 1854</code>
Warum ein einfacher CASE WHEN scheitert
Ein naiver Ansatz, der nur CASE WHEN
verwendet, könnte so aussehen:
<code class="language-sql">SELECT name, CASE WHEN val = 1 THEN amount ELSE 0 END AS amountVal1, CASE WHEN val = 2 THEN amount ELSE 0 END AS amountVal2 FROM bank;</code>
Dies führt zu einem falschen Ergebnis:
<code class="language-sql">name amountVal1 amountVal2 John 2000 0 Peter 1999 0 John 0 1888 Peter 0 1854</code>
Das Problem besteht darin, dass jede Zeile unabhängig behandelt wird. Wir müssen die Ergebnisse zusammenfassen.
Die richtige Lösung mit SUM()
Die Lösung besteht darin, die SUM()
-Aggregatfunktion zu verwenden, um die amount
-Werte für jede name
- und val
-Kombination zu summieren:
<code class="language-sql">SELECT name, SUM(CASE WHEN val = 1 THEN amount ELSE 0 END) AS amountVal1, SUM(CASE WHEN val = 2 THEN amount ELSE 0 END) AS amountVal2 FROM bank GROUP BY name;</code>
Diese Abfrage erzeugt korrekt die Pivot-Tabelle:
<code class="language-sql">name amountVal1 amountVal2 John 2000 1888 Peter 1999 1854</code>
Die GROUP BY name
-Klausel stellt sicher, dass die SUM()
-Funktion die Beträge für jeden eindeutigen Namen aggregiert. Die CASE WHEN
-Anweisungen weisen den entsprechenden Spalten (amountVal1
und amountVal2
) bedingt Beträge zu und behandeln Fälle, in denen ein bestimmtes val
für einen bestimmten Namen fehlt, indem sie 0 als Standardwert verwenden. Diese Technik bietet eine präzise und effiziente Möglichkeit, das Spalten-Pivotieren in SQL durchzuführen.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Spalte in SQL mit CASE WHEN und SUM() drehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!