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컬럼을 비교를 어떻게 해야하나요?
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 ) ;