ホームページ >データベース >mysql チュートリアル >Oracle で行を連結およびグループ化するにはどうすればよいですか?
Oracle での複数の行の連結とグループ化
Oracle では、グループ化条件に基づいてレコードを連結するタスクが困難な場合があります。次のようなテーブルについて考えてみましょう:
NAME GROUP_NAME name1 groupA name2 groupB name5 groupC name4 groupA name3 groupC
「GROUP_NAME」に基づいて「NAME」列をグループ化して連結するという望ましい結果を得るには、Oracle 11g 以降の LISTAGG 関数を利用できます。
SELECT group_name, LISTAGG(name, ', ') WITHIN GROUP (ORDER BY GROUP) "names" FROM name_table GROUP BY group_name
ただし、LISTAGG をサポートしていない Oracle バージョンを使用している場合は、別の方法があります。 1 つのアプローチでは、分析関数を利用します。
select grp, ltrim(max(sys_connect_by_path (name, ',' )), ',') scbp from (select name, grp, row_number() over (partition by grp order by name) rn from tab ) start with rn = 1 connect by prior rn = rn-1 and prior grp = grp group by grp order by grp
これらの手法を組み合わせることで、LISTAGG がない場合でも、Oracle で複数の行を効率的に連結してグループ化できます。
以上がOracle で行を連結およびグループ化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。