ホームページ >データベース >mysql チュートリアル >CASE WHEN を使用して SQL テーブルをピボットして行の重複を避けるにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。