首頁 > 資料庫 > mysql教程 > 如何使用 CASE WHEN 和聚合在 SQL 中透視列?

如何使用 CASE WHEN 和聚合在 SQL 中透視列?

DDD
發布: 2025-01-11 16:08:42
原創
700 人瀏覽過

How Can I Pivot a Column in SQL Using CASE WHEN and Aggregation?

利用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>
登入後複製

在這個查詢中:

  • CASE WHEN表達式會擷取每個「val」的「amount」值,並將任何不符的「val」值轉換為0。
  • SUM()函數聚合每個「name」的結果,有效地將對應「val」值的「amount」值相加。
  • GROUP BY子句以「name」分組結果,並確保為表中每個唯一名稱合併值。

透過使用此查詢,您可以成功地透視“Bank”表中的數據,創建所需的列“amountVal1”和“amountVal2”,它們分別包含“val”值為“1”和“2”的“amount”值。

以上是如何使用 CASE WHEN 和聚合在 SQL 中透視列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板