Oracleの縦に並んだデータを1行にの方法
Oracleで列方向のデータを1行に変換するには、OracleのPIVOT演算子かカスタム集計関数を使うことができます。
PIVOT 操作を使用します。
- まず、SELECTステートメントを使って、列データから全ての列名とその対応する値を取得する。
- 次に、PIVOT演算子でこれらの列名を新しい列として、対応する値を新しい行として展開します。
- 最後に、SELECT文で結果を行として出力します。
コード例:
SELECT *
FROM (
SELECT column_name, column_value
FROM your_table
)
PIVOT (
MAX(column_value)
FOR column_name IN ('列名1', '列名2', ...)
);
カスタム集計関数の利用
- 最初に、縦のデータを一行に結合するカスタムの集計関数を作成します。
- そして、結果の列をパラメーターとして渡すことで、その集計関数をSELECT文で呼び出します。
- 最後に、行で結果を出力する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行に展開したい列名です。ご自身の実態に合わせて修正ください。