手動変更なしで動的ピボット テーブルを Oracle SQL に実装します
Oracle SQL では、PIVOT 演算子を使用してユーザーが行を列に変換できます。ただし、標準の PIVOT 構文では、ユーザーは IN ステートメントで静的な値のリストを指定する必要があります。クエリを手動でメンテナンスする必要があるため、値が頻繁に変更されると問題が発生する可能性があります。
この問題を解決するには、関数と文字列の連結を使用して動的なピボット テーブルを作成します。
動的入力に関数を使用する
1 つの方法は、関数を使用して IN ステートメントで使用される値文字列を生成することです。例:
<code class="language-sql">CREATE FUNCTION GetDynamicPivotInString(table_name VARCHAR2, column_name VARCHAR2) RETURN VARCHAR2 IS BEGIN RETURN '''' || ( SELECT LISTAGG('''' || value || '''', ',') WITHIN GROUP (ORDER BY value) FROM (SELECT DISTINCT value FROM table_name ORDER BY value) ) || ''''; END;</code>
この関数は、ピボットするテーブル名と列名という 2 つのパラメーターを受け入れます。カンマで連結された値の文字列を返します。
接続文字列値
別の方法は、NEW_VALUE 演算子を使用して PIVOT ステートメント内で値文字列を直接連結することです。
<code class="language-sql">COLUMN temp_in_statement NEW_VALUE STRING; SELECT DISTINCT LISTAGG('''' || myLetter || ''' AS ' || myLetter, ',') WITHIN GROUP (ORDER BY myLetter) AS temp_in_statement FROM myTable; SELECT * FROM (SELECT myNumber, myLetter, myValue FROM myTable) PIVOT (Sum(myValue) AS val FOR myLetter IN (&temp_in_statement));</code>
このアプローチにより、PIVOT ステートメントでは常に指定された列の最新の値が使用されます。
制限事項
どちらの方法にも制限があります。関数を使用するには、追加のコードのメンテナンスが必要です。連結方法は、連結できる文字列のサイズによって制限されます。デフォルトでは 4000 バイトです。ただし、これらの方法は柔軟性があり、データまたはピボット値が変更された場合に手動介入を必要としません。
以上が手動更新せずにOracle SQLで動的ピボットを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。