programing

Oracle에서 여러 행 연결 및 그룹화

powerit 2023. 3. 29. 21:56
반응형

Oracle에서 여러 행 연결 및 그룹화

중복 가능성:
Oracle에서 A,B 형식의 두 열 데이터를 검색하는 방법

다음과 같은 테이블이 있다고 가정합니다.

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

다음과 같은 결과를 얻고 싶습니다.

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

테이블에 열이 하나밖에 없으면 다음을 수행하여 레코드를 연결할 수 있지만, 컨텍스트에서의 그룹화는 정말 잘 모르겠습니다.

하나의 열 테이블 연결:

SELECT names 
FROM (SELECT SYS_CONNECT_BY_PATH(names,' ') names, level
      FROM name_table

      START WITH names = (SELECT names FROM name_table WHERE rownum = 1)
      CONNECT BY PRIOR names < names
      ORDER BY level DESC)
      WHERE rownum = 1 

갱신일 :

이제 다음을 사용하여 해결 방법이 있습니다.LISTAGG:

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

여전히 다음과 같은 경우에 대해 보다 "일반적인" 솔루션에 관심이 있습니다.LISTAGG사용할 수 없습니다.

11g인 경우 LISTAGG 기능을 사용하는 것을 고려하십시오.

select grp, listagg(name,',') within group( order by name ) 
  from name_table group by grp

sqlFiddle

update: 그렇지 않은 경우 분석을 사용해 보십시오.

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

sqlFiddle

언급URL : https://stackoverflow.com/questions/12558509/concatenate-and-group-multiple-rows-in-oracle

반응형