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
....
어떻게 수정해야할지 감이 안잡히네요... 부탁드립니다.