Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Pivot Lajur dalam SQL Menggunakan CASE WHEN dan 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!