ホームページ > データベース > mysql チュートリアル > 手動更新せずにOracle SQLで動的ピボットを作成するにはどうすればよいですか?

手動更新せずにOracle SQLで動的ピボットを作成するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-24 01:06:09
オリジナル
964 人が閲覧しました

How to Create Dynamic Pivots in Oracle SQL Without Manual Updates?

手動変更なしで動的ピボット テーブルを 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート