[SQL] 오라클에 연결하여 그룹의 여러 행 [중복]
SQL오라클에 연결하여 그룹의 여러 행 [중복]
나는이 같은 테이블이 있다고 가정하자 :
NAME GROUP_NAME
name1 groupA
name2 groupB
name5 groupC
name4 groupA
name3 groupC
이 같은 결과를 가지고 싶습니다
GROUP_NAME NAMES
groupA name1,name4
groupB name2
groupC name3,name5
테이블에 하나의 컬럼이 있다면, 나는 다음을 수행하여 기록을 연결할 수 있지만, 상황에 그룹화와, 정말 많은 생각을하지 않습니다.
하나의 컬럼 테이블을 Concatatenating :
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를 사용할 수없는 경우 또 경우에보다 "일반적인"솔루션에 관심.
해결법
-
==============================
1.당신이 11g에있어 경우에 LISTAGG 기능을 사용하는 것이 좋습니다 :
당신이 11g에있어 경우에 LISTAGG 기능을 사용하는 것이 좋습니다 :
select grp, listagg(name,',') within group( order by name ) from name_table group by grp
sqlFiddle
UPD : 혹시, 웹 로그 분석을 사용하는 것을 고려하지 않을 :
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
from https://stackoverflow.com/questions/12558509/concatenate-and-group-multiple-rows-in-oracle by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 선택 다가오는 생일 (0) | 2020.04.20 |
---|---|
[SQL] MySQL의 쿼리, MAX () + GROUP BY (0) | 2020.04.20 |
[SQL] 저장 프로 시저 거래-SQL SQL 서버 내에서 결과 세트에 대한 액세스 (0) | 2020.04.20 |
[SQL] 와 DELETE SQL은 것은 WHERE 조건에 대한 다른 테이블 가입 (0) | 2020.04.20 |
[SQL] 식별 컬 테이블을 만드는 방법 (0) | 2020.04.20 |