database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41746 게시물 읽기
No. 41746
LISTAGG 함수사용하여 중복제거방법 문의드립니다.
작성자
딸기쥬스(딸기쥬스)
작성일
2019-08-01 16:38:24
조회수
263

이전 오라클 버전에서는 WM_CONCATE 함수가 지원되어

관련 함수안에 DISTINCT함수를 적용하여으나  LISTAGG 함수는

중복제거 기능이 없는 것 같습니다.

단일칼럼의 결과면 중복을 제거한 후 인라인뷰를 사용면 되지만

두개이상의 칼럼인 경우 방법을 못찾겠습니다. --;

 

관련 쿼리는 아래와 같습니다.

WITH TMP_TABLE
AS
(
  SELECT 'A1' KND1, 'B1' KND2 FROM DUAL
  UNION
  SELECT 'A1' KND1, 'B2' KND2 FROM DUAL
  UNION
  SELECT 'A1' KND1, 'B2' KND2 FROM DUAL
  UNION
  SELECT 'A1' KND1, 'B3' KND2 FROM DUAL

)
SELECT LISTAGG(KND1,',') WITHIN GROUP (ORDER BY KND1) KND1
      ,LISTAGG(KND2,',') WITHIN GROUP (ORDER BY KND2) KND2
  FROM TMP_TABLE

  

원하는 결과 값 

KND1 칼럼 

A1,A1,A1 (X) -> A1 (O)

   

이 글에 대한 댓글이 총 1건 있습니다.

아래 방법.

WITH TMP_TABLE
 AS
 (
   SELECT 'A1' KND1, 'B1' KND2 FROM DUAL
   UNION 
   SELECT 'A1' KND1, 'B2' KND2 FROM DUAL
   UNION 
   SELECT 'A1' KND1, 'B2' KND2 FROM DUAL
   UNION 
   SELECT 'A1' KND1, 'B3' KND2 FROM DUAL

)
 SELECT REGEXP_REPLACE(LISTAGG(KND1,',') WITHIN GROUP (ORDER BY KND1),'([^,]+)(,\1)+','\1') KND1
       ,LISTAGG(KND2,',') WITHIN GROUP (ORDER BY KND2) KND2
   FROM TMP_TABLE

박인호(paerae)님이 2019-08-01 16:51:43에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41749하루 시간의 데이터 뽑기 [1]
게스트
2019-08-09
211
41748날짜 구간별 분할에 대한 문의입니다. [1]
손미옥
2019-08-06
199
41747수동으로 테이블별 통계분석 설정시.... [1]
나경민
2019-08-01
182
41746LISTAGG 함수사용하여 중복제거방법 문의드립니다. [1]
딸기쥬스
2019-08-01
263
41745다음행 연결고리 쿼리 어떻게 하면 되나요? [1]
궁금이
2019-07-29
215
41744UNION 문의입니다. [1]
이현정
2019-07-25
220
41743[질문]두개 이상의 데이타베이스에서... [1]
신승익
2019-07-12
281
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.124초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다