728x90
SELECT * FROM ( SELECT TMP_PAGE.*, ROWNUM ROW_ID FROM ( SELECT ARCH_TYPE, CLASS_TYPE, COUNT,
REG_DT FROM ( SELECT TO_CHAR(a.REG_DT, 'YYYY-MM-DD') AS REG_DT , (SELECT CODE_NAME FROM ARCH_CODE_TBL
WHERE P_ID = 'ARCH_TYPE' AND CODE_ID = a.ARCH_TYPE) AS ARCH_TYPE, (SELECT CODE_NAME FROM ARCH_CODE_TBL
WHERE P_ID = 'TYPE' AND CODE_ID = a.CLASS_TYPE) AS CLASS_TYPE, COUNT(1) AS COUNT FROM ARCH_INFO_TBL
a WHERE 1=1 GROUP BY TO_CHAR(a.REG_DT, 'YYYY-MM-DD') , a.ARCH_TYPE, a.CLASS_TYPE UNION ALL
SELECT TO_CHAR(b.REG_DT, 'YYYY-MM-DD') AS REG_DT , (SELECT CODE_NAME FROM ARCH_CODE_TBL WHERE
P_ID = 'ARCH_TYPE' AND CODE_ID = b.KN_ARCH_TYPE) AS ARCH_TYPE, (SELECT CODE_NAME FROM ARCH_CODE_TBL
WHERE P_ID='TYPE' AND CODE_ID = b.CLASS_TYPE) AS class_type, COUNT(1) AS COUNT FROM KNOWLEDGE_TBL
b WHERE 1=1 GROUP BY TO_CHAR(b.REG_DT, 'YYYY-MM-DD') , b.KN_ARCH_TYPE, b.CLASS_TYPE )TEMP ORDER
BY REG_DT DESC ) TMP_PAGE) PAGE WHERE ROW_ID>0 AND ROW_ID<=10;
이렇게 union all로 복잡하게 join되어 나오는 테이블의 null 값을 변경하고 싶을 때는 어떻게 해야할까?
chatgpt에게 물어보니 COALESCE 함수나 CASE문을 사용하여 처리할 수 있다고 한다.
COALESCE 함수란?
NVL 함수의 기능이 조금 더 확장된 함수라고 생각하면 된다.
NVL 함수와 동일하게 사용할 수도 있지만, 여러 개의 컬럼이 NULL 값을 판별해야 할 경우 NULL이 아닌 첫번째 컬럼의 값을 반환할 때 유용하게 사용된다.
COALESCE(exp1, exp2, exp3, exp4, ...)와 같이 함수의 인자의 개수는 동적으로 입력할 수 있다.
그래서 나는 UNION ALL을 한 쿼리문에 각각 COALESCE를 사용하여 ARCH_TYPE이 NULL인 것은 '기타유형' 값이 들어갈 수 있게 하였다.
COALESCE((SELECT CODE_NAME FROM ARCH_CODE_TBL WHERE P_ID = 'ARCH_TYPE' AND CODE_ID = a.ARCH_TYPE),'기타유형') AS ARCH_TYPE
728x90
'BackEnd-Study > DB' 카테고리의 다른 글
[ORACLE] 하나의 테이블에 두개의 기본키 (0) | 2024.10.28 |
---|---|
[MyBatis] WHERE 1=1 (0) | 2024.04.03 |
CLOB (0) | 2024.03.30 |
char varchar varchar2 차이 (0) | 2024.03.30 |
댓글