오라클 중복제거 0 2 1,401

by QueryStudy [SQL Query] Left Join 중복제거 [2018.09.20 14:22:30]


SELECT
TF.TEAM,
TF.MNGNM,
TF.STATUS,
TF.HOSTNM,
TF.TYPE,
DP.SOURCEID,
DP.DPCLASS,
DP.SCANDATE,
DP.TAGNAME 
FROM TBF_TGT TF LEFT JOIN DPA_SVR DP 
ON UPPER(TF.HOSTNM) = UPPER(DP.TAGNAME) 
AND DP.SOURCEID not in('EndPoint 9.0')

이런 쿼리에서 DPA_SVR 테이블의 TAGNAME 컬럼이 중복이 있어 중복제거를 할려고 합니다.

TAGNAME 컬럼은 null값일수도 있습니다~

어떻게 수정하면 될지 도움 부탁드립니다.

by 마농 [2018.09.20 14:32:31]

오라클 맞나요?
쿼리가 이상한데요?
컬럼명이 숫자인 것도 이상하고? 컴마도 없고
컬럼명이나 컴마등을 좀 현실적으로 고쳐주세요.
예시자료도 몇건 들어 주세요.
원본 대비 결과표로 예를 들어주시면 좋습니다.

중복이 아닌데도 중복이 발생하는 것은
 - 쿼리를 잘못 짜서 그런 것이니 쿼리를 고치면 되지만
원래 중복이라서 중복인 것은 그냥 막 제거되는게 아닙니다.
 - 중복 제거의 기준이 명확하게 마련이 되어야 하는 문제입니다.


by 마농 [2018.09.20 16:34:28]

 

SELECT *
  FROM (SELECT tf.team
             , tf.mngnm
             , tf.status
             , tf.hostnm
             , tf.type
             , dp.sourceid
             , dp.dpclass
             , dp.scandate
             , dp.tagname
             , ROW_NUMBER() OVER(PARTITION BY 그룹기준 ORDER BY 정렬기준) rn
          FROM tbf_tgt tf
          LEFT JOIN dpa_svr dp
            ON UPPER(tf.hostnm) = UPPER(dp.tagname)
           AND dp.sourceid NOT IN ('EndPoint 9.0')
        )
 WHERE rn = 1
;

 

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