중복 제거 질문드립니다. 0 4 1,242

by QueryStudy [Oracle 기초] 오라클 중복제거 [2018.09.20 15:43:24]


SELECT
 T_BF.TEAM,
 T_BF.MNGNM,
 T_BF.STATUS,
 T_BF.HOSTNAME,,
 DPA.DPA_TAG,
 DPA.DPA_NODENAME,
 DPA.MAKEMODEL,
 DPA.NODEID,
 DPA.DPA_SWDECTION
FROM T_INSTALL T_BF LEFT JOIN D_DPA DPA
ON UPPER(T_BF.HOSTNAME) = UPPER(DPA.DPA_TAG)
AND DPA_SWDECTION NOT IN('MANAGER 9.0')

기준이 되는 T_INSTALL 테이블데이터 건수는 13,000건입니다.

D_DPA 테이블의 DPA_TAG컬럼과 조인을 하는데 DPA_TAG컬럼데이터가 NULL인것도 있고, 중복으로 들어가있는데이터도 있습니다.

별도의 조건없이 위의 기본 조건으로조회시 13,000건의 데이터가 나와야 하는 상황입니다.

DPA_TAG 가 중복인 경우는 첫번째 ROW의 정보를 사용하는것으로 간주합니다.

이같은 상황인데 중복제거를 어떤식으로 해야할까요..

UPPER(T_BF.HOSTNAME) = UPPER(DPA.DPA_TAG)

이부분에서 서브쿼리로 해야하나요? 가르침 부탁드립니다 TT

 

T_INSTALL TABLE

TEAM MNGNM STATUS HOSTNAME
인프라 개발   PWSASE3
인프라 개발   ASWSE55

D_DPA  TABLE

DPA_TAG DPA_NODENAME MAKEMODEL NODEID DPA_SWDECTION
pwsae3 121.1.1.1 HP 23522 ENDPOINT 9.2
pwsae3 121.2.23 IBM 23542 ENDPOINT 10.0
ASWSE55 202.15.2.3 IBM 52321 ENDPOINT 9.2
  UNKNOWN RH228H 23522 ENDPOINT 9.1

데이터는 이와같이 들어가 있습니다. 

T_INSTALL 테이블의 HOSTNAME는 중복되지않습니다.

by 우리집아찌 [2018.09.20 16:30:12]

중복이면 여러개중 선택해야할 조건 같은게 있지 않나요?


by 마농 [2018.09.20 16:45:14]
SELECT *
  FROM (SELECT t_bf.team
             , t_bf.mngnm
             , t_bf.status
             , t_bf.hostname
             , dpa.dpa_tag
             , dpa.dpa_nodename
             , dpa.makemodel
             , dpa.nodeid
             , dpa.dpa_swdection
             , ROW_NUMBER() OVER(PARTITION BY 그룹기준 ORDER BY 정렬기준) rn
          FROM t_install t_bf
          LEFT JOIN d_dpa dpa
            ON UPPER(t_bf.hostname) = UPPER(dpa.dpa_tag)
           AND dpa_swdection NOT IN ('MANAGER 9.0')
        )
 WHERE rn = 1
;

 


by QueryStudy [2018.09.20 18:06:00]

마농님 답변 감사합니다....

그런데 알려주신것과 같이 조회를 하면 T_INSTALL 테이블에 있는 13,000건의 데이터가 아닌

T_INSTALL의 HOSTNAME컬럼과 D_DPA 테이블의 DPA_ASSETTAG 컬럼 값이 같은 카운트만 나오는거같습니다.

T_T  GROUP 컬럼은 DPA_TAG 를 사용하였습니다.


by 마농 [2018.09.20 18:21:29]

그룹기준 항목은 t_bf 의 항목이어야 하고
정렬기준 항목은 dpa  의 항목이어야 하겠죠.

, ROW_NUMBER() OVER(PARTITION BY t_bf.hostname ORDER BY dpa.nodeid) rn

 

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