Oracleの縦に並んだデータを1行にの方法

Oracleで列方向のデータを1行に変換するには、OracleのPIVOT演算子かカスタム集計関数を使うことができます。

PIVOT 操作を使用します。

  1. まず、SELECTステートメントを使って、列データから全ての列名とその対応する値を取得する。
  2. 次に、PIVOT演算子でこれらの列名を新しい列として、対応する値を新しい行として展開します。
  3. 最後に、SELECT文で結果を行として出力します。

コード例:

SELECT *
FROM (
  SELECT column_name, column_value
  FROM your_table
)
PIVOT (
  MAX(column_value)
  FOR column_name IN ('列名1', '列名2', ...)
);

カスタム集計関数の利用

  1. 最初に、縦のデータを一行に結合するカスタムの集計関数を作成します。
  2. そして、結果の列をパラメーターとして渡すことで、その集計関数をSELECT文で呼び出します。
  3. 最後に、行で結果を出力するSELECT命令を使用する。

ネイティブな日本語に文章を言い換えてください。1つのオプションのみが必要です。サンプルコード:

CREATE OR REPLACE TYPE varchar2_ntt AS TABLE OF VARCHAR2(4000);

CREATE OR REPLACE FUNCTION concatenate_values(p_values varchar2_ntt)
RETURN VARCHAR2
IS
  v_result VARCHAR2(4000);
BEGIN
  SELECT LISTAGG(column_value, ',') WITHIN GROUP (ORDER BY column_name)
  INTO v_result
  FROM TABLE(p_values);
  
  RETURN v_result;
END;
/

SELECT concatenate_values(CAST(MULTISET(
  SELECT column_value
  FROM your_table
  ORDER BY column_name
) AS varchar2_ntt)) AS concatenated_values
FROM dual;

ご注意。「your_table」は縦列データを持ったテーブルで、「列名1」「列名2」等は1行に展開したい列名です。ご自身の実態に合わせて修正ください。

bannerAds