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
Lepaskan: 2025-01-11 15:51:46
asal
701 orang telah melayarinya

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

Bank:
name  val   amount
John   1     2000
Peter  1     1999
Peter  2     1854
John   2     1888
Salin selepas log masuk

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

name  amountVal1 amountVal2
John    2000        1888
Peter   1999        1854
Salin selepas log masuk
Salin selepas log masuk

Mengapa KES Mudah BILA Gagal

Pendekatan naif hanya menggunakan CASE WHEN mungkin kelihatan seperti ini:

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;
Salin selepas log masuk

Ini menghasilkan hasil yang salah:

name  amountVal1 amountVal2
John    2000        0
Peter   1999        0
John    0          1888
Peter   0          1854
Salin selepas log masuk

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:

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;
Salin selepas log masuk

Pertanyaan ini dengan betul menghasilkan jadual pangsi:

name  amountVal1 amountVal2
John    2000        1888
Peter   1999        1854
Salin selepas log masuk
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan