오라클 중복제이터 출력후 비교 0 1 551

by 사나마나 [SQL Developer] [2018.11.05 10:53:05]


a라는 테이블에 a,b,c,d,e,라는 컬럼가 있다고 가정할 때 데이터는 

a b c d e
asd 12 a e c
zxc 12 b d f
zxc 12 c c b
asd 13 d a d

이렇게 있다고 가정합니다.

여기서 a 컬럼과 b 컬럼이 같지 않은것만 출력을 하고 싶습니다.

위 데이터에서 원하는 결과값은

a b c d e
asd 12 a e c
asd 13 d a d

이런식입니다.

select a from a group by a having count(*) >1

이 쿼리로 a 중복값은 가져왔는데 b컬럼을 비교를 어떻게 해야하나요?

by 마농 [2018.11.05 11:22:57]
WITH t AS
(
SELECT 'asd' a, 12 b, 'a' c, 'e' d, 'c' e FROM dual
UNION ALL SELECT 'zxc', 12, 'b', 'd', 'f' FROM dual
UNION ALL SELECT 'zxc', 12, 'c', 'c', 'b' FROM dual
UNION ALL SELECT 'asd', 13, 'd', 'a', 'd' FROM dual
)
SELECT *
  FROM (SELECT a, b, c, d, e
             , COUNT(DISTINCT b) OVER(PARTITION BY a) cnt
          FROM t
        )
 WHERE cnt > 1
;
SELECT *
  FROM t m
 WHERE EXISTS (SELECT 1
                 FROM t s
                WHERE s.a  = m.a
                  AND s.b != m.b
               )
;

 

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