ホームページ >データベース >mysql チュートリアル >Oracle SQL でさまざまな値を使用して動的ピボットを実行する方法
Oracle SQL 動的ピボット テーブル: 値の変化への対処
Oracle SQL で PIVOT 関数を使用する場合、IN
ステートメントでの動的な値の処理は難しい場合があります。この記事では解決策を提供します。
Oracle の PIVOT では、通常、IN
ステートメントで静的な値文字列を使用する必要があります。例:
<code class="language-sql">... pivot (sum(A) for B in (X)) </code>
ただし、B の値がデータベース列に保存され、定期的に更新される場合、文字列 X を手動で更新するのは現実的ではありません。
この問題を解決するには、IN
文字列を作成し、それを PIVOT クエリで使用するというトリックを使用できます。細かく見てみましょう:
ステップ 1: IN 文字列
を構築する文字列を作成するには、次のように COLUMN NEW_VALUE
関数と LISTAGG
関数を使用します。
<code class="language-sql">COLUMN temp_in_statement new_value str_in_statement SELECT DISTINCT LISTAGG('''' || myLetter || ''' AS ' || myLetter,',') WITHIN GROUP (ORDER BY myLetter) AS temp_in_statement FROM (SELECT DISTINCT myLetter FROM myTable);</code>このクエリは次のような文字列を構築します:
<code>'A' AS A,'B' AS B,'C' AS C</code>
ステップ 2: PIVOT で文字列を使用する
これで、次の文字列を PIVOT クエリに追加できます:
<code class="language-sql">SELECT * FROM (SELECT myNumber, myLetter, myValue FROM myTable) PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));</code>
制限事項:
この方法は解決策を提供しますが、制限があります。接続文字列の最大長は 4000 バイトです。したがって、B の値の数が非常に多い場合、この方法は適さない可能性があります。以上がOracle SQL でさまざまな値を使用して動的ピボットを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。