SQL 列のピボットに CASE WHEN を使用する
SQL データを行から列に変換する必要がありますか? CASE WHEN
ステートメントは、特に集計が必要な列に重複した値を含むテーブルを扱う場合に、ピボットに対する簡単なソリューションを提供します。
例を挙げて説明しましょう。 このテーブルを想像してください:
<code class="language-sql">Bank: name val amount John 1 2000 Peter 1 1999 Peter 2 1854 John 2 1888</code>
私たちの目標: これを、一意の "val" 値が列となり、それぞれの一意の "name" が行となるテーブルに再構築します。目的の出力:
<code class="language-sql">name amountVal1 amountVal2 John 2000 1888 Peter 1999 1854 </code>
SUM()
と CASE WHEN
を使用してこのピボットを実現する方法は次のとおりです。
<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>
このクエリは、SUM()
を使用して、一意の amount
と name
の組み合わせごとに val
値を集計します。 CASE WHEN
ステートメントは、val
が 1 か 2 であるかを確認し、それに応じて対応する amount
を割り当てます。 GROUP BY name
は、一意の名前ごとに 1 行を保証します。 結果? amountVal1
列と amountVal2
列は、ピボットされたデータをきちんと表します。 この方法は、既知の限られた数の val
値に対して有効です。動的な値の数については、PIVOT またはその他のより高度なテクニックの使用を検討してください。
以上がCASE WHEN を使用して SQL 列をピボットして行データを列に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。