2016-07-27 4 views
3

다른 행에 걸쳐 여러 열 사이에 중복 값 찾기 . 나는 또한 싶습니다내가이에 유사 여러 열이있는 데이터 세트를

ID  Replicates 
Blue 3  
Black 1  
Green 3  
Pink 2 
Grey 1 
Yellow 2 
Fuchsia 1 
Orange 2 

주파수> 2로 설정 데이터에 존재하는 ID 값을 요청 할 수 있도록 : 예를 들어, 내가 다시 위에서 좀하고 싶습니다 것입니다. 예상 결과는 녹색과 파란색입니다.

오라클에서이 작업을 수행하는 방법에 대한 의견이 있으십니까? 감사!

답변

3
select c, count(*) 
from 
(
select ID1 as c from tablename 
union all 
select ID2 as c from tablename 
union all 
select ID3 as c from tablename 
union all 
select ID4 as c from tablename 
) 
group by c 

끝에 HAVING count(*) > 2을 추가하면 녹색 및 파란색 만 표시됩니다.

+0

감사합니다! 위의 쿼리는 "as dt"가 쿼리에서 제거되면 작동합니다. 그렇지 않으면 "SQL 명령이 제대로 종료되지 않았습니다"오류가 표시됩니다. 또한이 쿼리의 논리를 설명 할 수 있습니까? –

+0

'as dt '가 삭제되었습니다. (ANSI SQL,하지만 오라클은 그것을 좋아하지 않습니다 ...) 하위 쿼리 (파생 테이블)는 단순히 하나의 열로 모든 데이터를 반환합니다. GROUP BY는 계산을 수행합니다. (HAVING은 결과를 두 번 이상 나타나는 색상으로 만 제한하는 데 사용됩니다.) – jarlh

1
SELECT ID, COUNT(*) FROM(
SELECT ID1 ID FROM TBL UNION ALL 
SELECT ID2 ID FROM TBL UNION ALL 
SELECT ID3 ID FROM TBL UNION ALL 
SELECT ID4 ID FROM TBL) Q 
GROUP BY Q.ID; 
1
select id, sum(id_cnt) 
(select ID1 as ID,count(*) as id_cnt from tableA group by ID1 
union all 
select ID2,count(*)from tableA group by ID2 
union all 
select ID3,count(*)from tableA group by ID3 
union all 
select ID4,count(*)from tableA group by ID4) 
group by id 

Outpout 여기 오라클의 unpivot 키워드를 사용하여 다른 매우 솔직 옵션입니다

ID  Replicates 
Blue 3  
Black 1  
Green 3  
Pink 2 
Grey 1 
Yellow 2 
Fuchsia 1 
Orange 2 
1

유사합니다

select id, count(*) as replicates 
from tbl 
unpivot 
(
    id for original_column_name in (id1, id2, id3, id4) 
) 
group by id 

이 ... 물론, 당신 원하는대로 having 및/또는 order by 절을 추가 할 수 있습니다.

관련 문제