使用 CASE WHEN 和 SUM() 在 SQL 中透視列
資料轉換通常需要重塑表格,將資料從行移動到列中,這個過程稱為資料透視。 此範例示範如何使用 CASE WHEN
和 SUM()
.
讓我們考慮一個名為「Bank」的範例表:
<code class="language-sql">Bank: name val amount John 1 2000 Peter 1 1999 Peter 2 1854 John 2 1888</code>
我們的目標是將該表轉換為以下格式:
<code class="language-sql">name amountVal1 amountVal2 John 2000 1888 Peter 1999 1854</code>
為什麼一個簡單的案例會失敗
僅使用 CASE WHEN
的簡單方法可能如下所示:
<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>
這會產生錯誤的結果:
<code class="language-sql">name amountVal1 amountVal2 John 2000 0 Peter 1999 0 John 0 1888 Peter 0 1854</code>
問題是每一行都是獨立處理的。 我們需要匯總結果。
SUM() 的正確解
解決方案在於使用 SUM()
聚合函數對每個 amount
和 name
組合的 val
值求和:
<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>
此查詢正確產生資料透視表:
<code class="language-sql">name amountVal1 amountVal2 John 2000 1888 Peter 1999 1854</code>
GROUP BY name
子句確保 SUM()
函數聚合每個唯一名稱的金額。 CASE WHEN
語句有條件地將金額分配給適當的列(amountVal1
和 amountVal2
),透過使用 0 作為預設值來處理給定名稱缺少特定 val
的情況。 該技術提供了一種在 SQL 中執行列透視的簡潔有效的方法。
以上是如何使用 CASE WHEN 和 SUM() 在 SQL 中透視列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!