OUTER JOIN 를 하는데 조인 방법좀 부탁드립니다. 0 4 1,312

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

----------------

 

부탁드립니다.

감사합니다.

 

 

 

by 비주류 [2014.06.12 21:39:34]
SELECT V2.CD, NVL(CNT, 0), NVL(SUB_TOTAL, 0), NVL(RID, 0)
FROM (SQL1내용) V1, (SQL2내용) V2
WHERE V2.CD = V1.CD(+)
ORDER BY CD

by 짱구 [2014.06.13 10:03:08]

감사합니다.
도움이 많이 되었습니다.


by 마농 [2014.06.12 23:54:47]
-- 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
;

 


by 짱구 [2014.06.13 10:05:19]

네.. SUM(CNT) 가 T3에 필드 맞습니다.

나온값을 가지고 밖에서 outer join 하면되겠다는 생각을 못했네요 ^^

마농님 정말 감사합니다.

저에겐 정말 큰 힘이 되었습니다.

생각하는 시야도 넓혀 가는것 같구요 ^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입