오라클 LISTAGG 함수 좀 여쭤보겠습니다. 0 2 7,291

by minrule [SQL Query] ORACLE PL/SQL LISTAGG [2019.06.06 18:57:07]


아래 테이블과 같은 검사 결과를

테이블명 : TMP1

ID INSP_SEQ JUDGE DEFECTNAME
A 1 NG DF1
A 1 NG DF2
A 1 NOK NOK1
A 2 NOK NOK2
A 2 NOK NOK3
B 1 NOK NOK4

 

아래처럼 ID, INSP_SEQ, JUDGE 별로  ROW 수 , DEFECTNAME을 붙여서 나타내려고 합니다. 

ID INSP_SEQ JUDGE COUNT INSP_DETAIL
A 1 NG 2

DF1; DF2;

A 1 NOK 1 NOK1;
A 2 NOK 2 NOK2; NOK3;
B 1 NOK 1 NOK4;

 

해서 아래와 같이 쿼리문을 짰는데요.

 

 SELECT T1.ID 

        , T1.INSP_SEQ

        , T1.JUDGE

        , COUNT(*)

        , LISTAGG(T1.DEFECTNAME , ';'||CHR(13)||CHR(10)) WITHIN GROUP (ORDER BY T1.ID ,  T1.INSP_SEQ, T1.JUDGE ) AS INSP_DETAIL

  FROM TMP1 T1

   GROUP BY T1.ID , T1.INSP_SEQ, T1.JUDGE

 

 

예상과는 다르게 INSP_DETAIL 컬럼이 비어서 나옵니다.

ID INSP_SEQ JUDGE COUNT INSP_DETAIL
A 1 NG 2

 

A 1 NOK 1  
A 2 NOK 2  
B 1 NOK 1  

 

SQL 쿼리 밑부분의 GROUP BY 절이 문제인가 싶어서 노란색으로 하이라이트 처리된 부분을 제거하고 실행시키면 

ORA-00937 단일 그룹의 그룹 함수가 아닙니다. 가 나오며 에러 표시가 쿼리의 T1.ID 부분에 나옵니다.

SELECT T1.ID

                  ....

 

어떻게 수정해야할지 감이 안잡히네요... 부탁드립니다.

by 마농 [2019.06.07 08:46:49]

1. 쿼리는 맞게 작성하셨습니다.
  - 정렬 부분이 좀 맞지 않긴 하지만. 큰 문제는 없습니다.
  - 그룹바이 기준으로 정렬하는 것은 동일한 값으로 정렬하는 것이므로 무의미한 정렬
2. 어떤 툴을 쓰시나요?
  - 줄바꿈 표시 때문에 그런게 아닐까요?


by minrule [2019.06.07 20:47:01]

PL/SQL DEVELOPER 사용하고있습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입