ホームページ >データベース >mysql チュートリアル >Oracle SQL でさまざまな値を使用して動的ピボットを実行する方法

Oracle SQL でさまざまな値を使用して動的ピボットを実行する方法

Susan Sarandon
Susan Sarandonオリジナル
2025-01-24 00:57:10736ブラウズ

How to Perform Dynamic Pivots in Oracle SQL with Varying Values?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。