본문 바로가기
BackEnd-Study/DB

[ORACLE] union all로 조인한 테이블 특정 데이터 값 수정

by ChaeLOTUS 2024. 10. 29.
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

댓글