Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine Spalte in SQL mit CASE WHEN und SUM() drehen?

Wie kann ich eine Spalte in SQL mit CASE WHEN und SUM() drehen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-11 15:51:46685Durchsuche

How to Pivot a Column in SQL Using CASE WHEN and SUM()?

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().

geschwenkt wird

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn