테이블이 2개가 있는데요.
두 테이블 조인해서 가지고 옵니다.
SELECT TB.BUDG_SEQ
, REPLACE( REPLACE(REPLACE(TO_CHAR(SYSDATE,'YYYY* MM^ DD&'), '*' ,'년') ,'^' ,'월' ),'&' ,'일' ) AS NOWDATE
, TB.BG_CD
, TB.BIZ_CD
, TB.POOL_PJT_ID
, TB.REV_NO
, TB.PROB_EXAM_YN
, TB.DEPT_NEGO_YN
, TB.PRE_BUDG_PURP
, TB.PRE_BUDG_ITEM
, TB.REG_ID
, TB.REG_DT
, TB.MOD_ID
, TB.MOD_DT
, TD.BUDG_SEQ
, TD.TOP_KND_NM
, TD.MID_KND_NM
, TD.ITEM_CD
, TD.ITEM_NM
, TD.ESTMT_AMT
, TD.PRE_BUDG_AMT
, TD.EXEC_RATE
, TD.REM
FROM T_QG42_PRE_BUDG TB,
T_QG42_PRE_BUDG_DTL TD
WHERE TB.BUDG_SEQ = TD.BUDG_SEQ
AND TD.BUDG_SEQ= 0000049
해당하는 PK 키를 가지고 검색하여 T_QG42_PRE_BUDG_DTL 테이블에서 데이터를 가지고 와야하는데요.
캡춰 보시면 TD.ITEM_CD에서 번호가 16,17,18,19,20에서 NULL인 로우는 빼서 가지고 와야하거든요.
SELECT * FROM
(
SELECT TL.DTL_SEQ
, TL.BUDG_SEQ
, TL.TOP_KND_NM
, TL.MID_KND_NM
, TL.ITEM_CD
, TL.ITEM_NM
, TL.ESTMT_AMT
, TL.PRE_BUDG_AMT
, TL.EXEC_RATE
, TL.REM
FROM T_QG42_PRE_BUDG_DTL TL
WHERE TL.BUDG_SEQ = 000049
AND TL.ITEM_CD IN (16,17,18,19,20)
) T1
WHERE T1.ITEM_NM IS NOT NULL OR T1.ESTMT_AMT IS NOT NULL OR T1.PRE_BUDG_AMT IS NOT NULL
저걸 어떻게 합쳐야 할지 모르겠어요.
IN을 쓰면서 저렇게 IN에 포함되는 로우만 빼버릴수 있는 방법이 없을까요?
UNION ALL을 써야할까요??
-- 맞는답인지 모르겠네요.. WITH T AS ( SELECT '15' V1 , 'T' V2 ,'' V3 ,'' V4 FROM DUAL UNION ALL SELECT '16' , '' , '' , '' FROM DUAL UNION ALL SELECT '17' , '' , '' , '' FROM DUAL UNION ALL SELECT '18' , '' , '' , '' FROM DUAL ) SELECT * FROM T WHERE V1 IN ('15','16','17','18') AND V2 || V2 || V3 || V4 IS NOT NULL