利用SQL的CASE WHEN語句進行列的透視
在關係型資料庫中,為了分析或展示資料的需要,經常需要將資料重塑成不同的格式。其中一個常見的轉換是透視,即將多行資料合併成一行。
問題:
考慮名為「Bank」的表,其列為「name」、「val」和「amount」:
name | val | amount |
---|---|---|
John | 1 | 2000 |
Peter | 1 | 1999 |
Peter | 2 | 1854 |
John | 2 | 1888 |
目標是透視「val」列,建立兩個名為「amountVal1」和「amountVal2」的新欄位,分別表示「val」值為「1」和「2」的「amount」值。期望的輸出如下圖所示:
name | amountVal1 | amountVal2 |
---|---|---|
John | 2000 | 1888 |
Peter | 1999 | 1854 |
解:
為了執行此轉換,可以使用CASE WHEN表達式以及聚合函數。以下SQL查詢可以達到預期的結果:
<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>
在這個查詢中:
透過使用此查詢,您可以成功地透視“Bank”表中的數據,創建所需的列“amountVal1”和“amountVal2”,它們分別包含“val”值為“1”和“2”的“amount”值。
以上是如何使用 CASE WHEN 和聚合在 SQL 中透視列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!