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

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

DDD
DDDオリジナル
2025-01-04 05:45:39706ブラウズ

How Can I Concatenate and Group Multiple Rows in Oracle?

Oracle での複数の行の連結とグループ化

この記事では、Oracle で複数の行を連結してグループ化するという課題に取り組み、テーブルを変換できるようにします。分散したデータをより組織化された構造にまとめます。次のシナリオを考えてみましょう:

NAME と GROUP_NAME の 2 つの列を含むテーブルがあります:

NAME          GROUP_NAME
name1         groupA
name2         groupB
name5         groupC
name4         groupA
name3         groupC

目的は、一意の GROUP_NAME 値ごとに名前が連結された結果を作成することです:

GROUP_NAME     NAMES
groupA         name1,name4
groupB         name2
groupC         name3,name5

この場合、Oracle 11g 以降で使用できる LISTAGG 関数は、簡単な解決策:

SELECT
group_name,
LISTAGG(name, ', ')
WITHIN GROUP (ORDER BY GROUP) "names"
FROM name_table
GROUP BY group_name

ただし、11g より前のバージョンの Oracle を使用している場合は、分析を使用して同じ結果を達成できます:

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 までご連絡ください。