ホームページ >データベース >mysql チュートリアル >CASE WHEN を使用して SQL テーブルをピボットして行の重複を避けるにはどうすればよいですか?

CASE WHEN を使用して SQL テーブルをピボットして行の重複を避けるにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-11 15:47:43963ブラウズ

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

SQL で CASE WHEN ステートメントを使用して列ピボットを実行します

SQL のピボット操作とは、データ テーブル内の垂直方向に配置された列を水平方向に配置された列に変換することを指します。これは通常、CASE WHEN ステートメントを使用して実行されます。

名前、値、金額の 3 つの列があるテーブルがあるとします。目標は、データを新しい表現に変換することです。各行は名前を表し、各列は val 列の特定の値 (「Val1」や「Val2」など) を表します。

CASE WHEN ステートメントを使用して最初のクエリを作成しようとしましたが、結果は完全に正しくありません。具体的には、John と Peter の行が 2 回繰り返され、1 つの行には val = 1 に関連付けられた金額値が含まれ、もう 1 つの行には val = 2 に関連付けられた金額値が含まれます。

この問題を解決するには、SUM() 集計関数を CASE WHEN ステートメントと組み合わせて使用​​します。各 val 値に関連付けられた金額を合計することで、名前ごとに行を効果的にグループ化し、値を 1 つの列に結合します。

次の変更されたクエリは、望ましい結果を生成します:

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

このクエリは、各名前グループの各 val 値の量を合計し、次の出力を取得します:

name amountVal1 amountVal2
John 2000 1888
Peter 1999 1854

以上がCASE WHEN を使用して SQL テーブルをピボットして行の重複を避けるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。