Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Mengubah Jadual SQL Menggunakan CASE WHEN untuk Mengelakkan Baris Pendua?

Bagaimanakah Saya Boleh Mengubah Jadual SQL Menggunakan CASE WHEN untuk Mengelakkan Baris Pendua?

Barbara Streisand
Barbara Streisandasal
2025-01-11 15:47:431010semak imbas

How Can I Pivot a SQL Table Using CASE WHEN to Avoid Duplicate Rows?

Gunakan pernyataan CASE WHEN dalam SQL untuk melaksanakan pangsi lajur

Operasi pangsi dalam SQL merujuk kepada menukar lajur tersusun menegak dalam jadual data kepada lajur tersusun mendatar. Ini biasanya dicapai menggunakan pernyataan CASE WHEN.

Andaikan terdapat jadual dengan tiga lajur: nama, nilai dan amaun. Matlamatnya adalah untuk mengubah data menjadi perwakilan baharu: setiap baris mewakili nama dan setiap lajur mewakili nilai khusus dalam lajur val, seperti 'Val1' dan 'Val2'.

Anda telah mencuba menulis pertanyaan awal menggunakan pernyataan CASE WHEN, tetapi hasilnya tidak betul. Secara khusus, baris untuk John dan Peter diulang dua kali, dengan satu baris mengandungi nilai amaun yang dikaitkan dengan val = 1 dan baris lain mengandungi nilai amaun yang dikaitkan dengan val = 2.

Untuk menyelesaikan masalah ini, kita boleh menggunakan fungsi agregat SUM() bersama-sama dengan pernyataan CASE WHEN. Dengan menjumlahkan amaun yang dikaitkan dengan setiap nilai val, kami mengumpulkan baris dengan berkesan untuk setiap nama dan menggabungkan nilai ke dalam satu lajur.

Pertanyaan yang diubah suai berikut akan menghasilkan hasil yang diingini:

<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 menjumlahkan amaun setiap nilai val dalam setiap kumpulan nama dan mendapat output berikut:

name amountVal1 amountVal2
John 2000 1888
Peter 1999 1854

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Jadual SQL Menggunakan CASE WHEN untuk Mengelakkan Baris Pendua?. 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