Oracle での複数の行の連結とグループ化
連結とグループ化が必要な複数の行を含むテーブルがあるシナリオでは、 Oracle 11g の LISTAGG 関数は、簡単な機能を提供します。解決策:
SELECT group_name, LISTAGG(name, ', ') WITHIN GROUP (ORDER BY GROUP) AS "names" FROM name_table GROUP BY group_name
LISTAGG 関数は、指定された区切り文字 (ここでは「,」) で区切って、行のグループから複数の値を集計します。これにより、連結とグループ化のプロセスが簡素化され、目的の結果が得られます。
Oracle 11g より前のデータベースの場合は、分析を使用した代替アプローチが利用可能です。
SELECT grp, ltrim(max(sys_connect_by_path(name, ',' )), ',') AS scbp FROM ( SELECT name, grp, row_number() OVER (PARTITION BY grp ORDER BY name) AS rn FROM tab ) START WITH rn = 1 CONNECT BY PRIOR rn = rn - 1 AND PRIOR grp = grp GROUP BY grp ORDER BY grp
このクエリは CONNECT BY を利用します。句と row_number() 分析関数を使用して値を繰り返し連結およびグループ化し、LISTAGG と同じ出力を生成します。メソッド。
以上がOracle で複数の行を連結してグループ化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。