ホームページ > データベース > mysql チュートリアル > CASE WHEN と集計を使用して SQL で列をピボットするにはどうすればよいですか?

CASE WHEN と集計を使用して SQL で列をピボットするにはどうすればよいですか?

DDD
リリース: 2025-01-11 16:08:42
オリジナル
748 人が閲覧しました

How Can I Pivot a Column in SQL Using CASE WHEN and Aggregation?

SQL の CASE WHEN ステートメントを使用して列をピボットする

リレーショナル データベースでは、データを分析または表示するために、データをさまざまな形式に再形成する必要があることがよくあります。一般的な変換の 1 つはピボットです。これは、複数のデータ行を 1 つの行に結合します。

質問:

列「name」、「val」、「amount」を持つ「Bank」という名前のテーブルについて考えます。

name val amount
John 1 2000
Peter 1 1999
Peter 2 1854
John 2 1888

目標は、「val」列をピボットし、「amountVal1」と「amountVal2」という名前の 2 つの新しい列を作成し、「1」と「2」の「val」値で「amount」値を表すことです。それぞれ。目的の出力は次のようになります:

name amountVal1 amountVal2
John 2000 1888
Peter 1999 1854

解決策:

この変換を実行するには、CASE WHEN 式を集計関数とともに使用できます。次の SQL クエリは期待どおりの結果をもたらします:

<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>
ログイン後にコピー

このクエリ内:

  • CASE WHEN 式は、各「val」の「amount」値を取得し、一致しない「val」値を 0 に変換します。
  • SUM() 関数は、各「name」の結果を集計し、「val」値に対応する「amount」値を効果的に加算します。
  • GROUP BY 句は結果を「名前」ごとにグループ化し、テーブル内の一意の名前ごとに値がマージされるようにします。

このクエリを使用すると、「Bank」テーブルのデータを正常にピボットし、それぞれ「1」と「2」の「val」値を含む必要な列「amountVal1」と「amountVal2」を作成できます。金額」の値。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート