by 짱구 [SQL Query] oracle outer join join [2014.06.12 18:15:15]
쿼리는 아래와 같습니다.
SELECT T2.CD,
, COUNT (*) CNT
, SUM(CNT) SUB_TOTAL
, ROW_NUMBER () OVER (ORDER BY T2.CD) RID
FROM TB_CO T1
, DTLD T2
, DATA T3
WHERE T1.NO = T3.NO
AND T1.TYPE(+) = T2.DTLD_CD
AND T2.MSTR_CD = '4100'
AND T1.SEQ(+) = (SELECT MAX (SEQ)
FROM TB_CO
WHERE NO = T1.NO)
AND T1.STATE_CODE IN ('45000003', '45000005', '45000002')
AND T3.YEAR = '2014'
AND T3.YN = 'Y'
AND T3.OPEN > 0
GROUP BY T2.DTLD_CD
SELECT *
FROM DTLD
WHERE MSTR_CD = '4100'
하면 아래와 같이 나옵니다.
-------------------------
CD NM
100 가
200 나
300 다
------------------------
위에 쿼리를 하면 값이 없어도 아래와 같이 out join 효과를 보고싶습니다.
----------------
100 0 0 1
200 0 0 2
300 0 0 3
----------------
부탁드립니다.
감사합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | -- SUM(cnt) sub_total 의 cnt 가 뭔지 의문이네요? -- 일단 t3 의 항목으로 간주하고 풀어보겠습니다. -- 각 테이블의 데이터가 어떤 형태로 어떤 관계로 되어 있는지를 -- 알아야만 효율적인 쿼리를 작성 할 수 있는데... SELECT t2.dtld_cd , COUNT (*) cnt , NVL( SUM (t4.cnt), 0) sub_total , ROW_NUMBER() OVER( ORDER BY t2.dtld_cd) rid FROM dtld t2 , ( SELECT * FROM ( SELECT t2.dtld_cd , t3.cnt , ROW_NUMBER() OVER(PARTITION BY t2. no ORDER BY t2.seq DESC ) rn FROM tb_co t1 , dtld t2 , data t3 WHERE t1. no = t3. no AND t1.type = t2.dtld_cd AND t2.mstr_cd = '4100' AND t1.state_code IN ( '45000003' , '45000005' , '45000002' ) AND t3. year = '2014' AND t3.yn = 'Y' AND t3. open > 0 ) WHERE rn = 1 ) t4 WHERE t2.dtld_cd = t4.dtld_cd(+) AND t2.mstr_cd = '4100' GROUP BY t2.dtld_cd ; |