ホームページ >データベース >mysql チュートリアル >動的値を使用して Oracle SQL テーブルを動的にピボットする方法
Oracle SQL 動的ピボットと動的値
Oracle SQL でピボット テーブルを使用する場合の一般的な課題は、動的な値を含むピボット テーブルを作成することです。従来のアプローチは、ピボット テーブルの IN ステートメントで使用される静的文字列に新しい値を手動で追加することであり、非効率的です。
動的 IN ステートメントの制限事項
サブクエリ、PL/SQL 変数、またはネストしたクエリを使用して、動的ステートメントを PIVOT IN ステートメントに直接埋め込むことはサポートされていません。さらに、PIVOT XML を使用すると、出力が最適化されない可能性があります。
解決策: 動的 IN 文字列を作成します
これらの制限を克服するには、動的な IN 文字列を作成する方法を使用できます。ステップバイステップのガイドは次のとおりです:
動的文字列を生成するための SELECT ステートメントを作成します:
例: 次のテーブルの例を考えてみましょう:
<code>| myNumber | myValue | myLetter | |---|---|---| | 1 | 2 | A | | 1 | 4 | B | | 2 | 6 | C | | 2 | 8 | A | | 2 | 10 | B | | 3 | 12 | C | | 3 | 14 | A |</code>
動的 IN 文字列を生成するには、次のステートメントを実行します:
<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 class="language-sql">SELECT * FROM (SELECT myNumber, myLetter, myValue FROM myTable) PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));</code>
出力:
<code>| MYNUMBER | A_VAL | B_VAL | C_VAL | |---|---|---|---| | 1 | 2 | 4 | NULL | | 2 | 8 | 10 | 6 | | 3 | 14 | NULL | 12 |</code>
制限事項:
このメソッドの制限は、連結できる最大文字列サイズが 4000 バイトであることです。
以上が動的値を使用して Oracle SQL テーブルを動的にピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。