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>
このクエリ内:
このクエリを使用すると、「Bank」テーブルのデータを正常にピボットし、それぞれ「1」と「2」の「val」値を含む必要な列「amountVal1」と「amountVal2」を作成できます。金額」の値。
以上がCASE WHEN と集計を使用して SQL で列をピボットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。