Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Pivot Lajur dalam SQL Menggunakan CASE WHEN dan SUM()?

Bagaimana untuk Pivot Lajur dalam SQL Menggunakan CASE WHEN dan SUM()?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-11 15:51:46647semak imbas

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

Menggunakan CASE WHEN dan SUM() untuk Pivot Lajur dalam SQL

Transformasi data selalunya memerlukan pembentukan semula jadual, mengalihkan data daripada baris ke lajur—suatu proses yang dikenali sebagai pivoting. Contoh ini menunjukkan cara untuk memutar lajur dalam SQL menggunakan CASE WHEN dan SUM().

Mari kita pertimbangkan jadual contoh bernama "Bank":

<code class="language-sql">Bank:
name  val   amount
John   1     2000
Peter  1     1999
Peter  2     1854
John   2     1888</code>

Matlamat kami adalah untuk mengubah jadual ini ke dalam format berikut:

<code class="language-sql">name  amountVal1 amountVal2
John    2000        1888
Peter   1999        1854</code>

Mengapa KES Mudah BILA Gagal

Pendekatan naif hanya menggunakan CASE WHEN mungkin kelihatan seperti ini:

<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>

Ini menghasilkan hasil yang salah:

<code class="language-sql">name  amountVal1 amountVal2
John    2000        0
Peter   1999        0
John    0          1888
Peter   0          1854</code>

Masalahnya ialah setiap baris dirawat secara berasingan. Kita perlu mengagregatkan keputusan.

Penyelesaian yang Betul dengan SUM()

Penyelesaian terletak pada penggunaan SUM() fungsi agregat untuk menjumlahkan nilai amount bagi setiap kombinasi name dan 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>

Pertanyaan ini dengan betul menghasilkan jadual pangsi:

<code class="language-sql">name  amountVal1 amountVal2
John    2000        1888
Peter   1999        1854</code>

Klausa GROUP BY name memastikan bahawa fungsi SUM() mengagregatkan amaun untuk setiap nama unik. Penyata CASE WHEN secara bersyarat menetapkan amaun kepada lajur yang sesuai (amountVal1 dan amountVal2), mengendalikan kes di mana val tertentu tiada untuk nama tertentu dengan menggunakan 0 sebagai nilai lalai. Teknik ini menyediakan cara yang ringkas dan cekap untuk melaksanakan pivoting lajur dalam SQL.

Atas ialah kandungan terperinci Bagaimana untuk Pivot Lajur dalam SQL Menggunakan CASE WHEN dan SUM()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn