ホームページ >データベース >mysql チュートリアル >Oracle で行を連結およびグループ化するにはどうすればよいですか?

Oracle で行を連結およびグループ化するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-04 22:58:41200ブラウズ

How Can I Concatenate and Group Rows in 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。