2014-09-10 4 views
0

테이블을 검색하고 열 중 하나에서 중복 된 인스턴스를 찾으려고 할 때 중복되지 않을 다른 열의 값을 반환하고 싶습니다. . 내가 함께 ctrl_nbr 및 CURR_CODE 모두 값을 반환하려면 코드를 얻이 수없는 것 테이블에서 중복을 반환하고 중복되지 않은 열을 첨부했습니다.

ctrl_nbr curr_code 
001  999 
002  888 
003  777 
004  999 

처럼

는 예를 들어 내 테이블을 볼 수 있었다.

select curr_code from ctrl_hdr 
where nbr_sfx = 'A' 
group by curr_code 
having count(ctrl_nbr) > '1' 

이 제대로 나에게 중복 ctrl_nbr이 curr_codes을 제공하지만, 내가 선택하고 그룹 기능에 ctrl_nbr를 추가하는 경우 다음 아무 것도 반환하지 않습니다 - :

여기에 내가 지금까지 무엇을합니다.

가 나는 또한 시도했다 : -

SELECT ctrl_nbr, 
    curr_code 
FROM ctrl_hdr 
WHERE curr_code IN 
(SELECT curr_code 
    FROM ctrl_hdr 
    WHERE nbr_sfx = 'A' 
    GROUP BY curr_code 
    HAVING count(ctrl_nbr) > '1') 

그러나 이것은 단지 루프의 어떤 종류를 입력 보인다 끝나지 않습니다.

+0

두 값을 결합하여 중복 된 레코드가 없습니다. 따라서 결과를 얻지 못하는 것은 핵심입니다. – Jens

+0

게시 한 샘플 데이터에 대해 원하는 결과를 붙여 넣을 수 있습니까? –

+0

내 머리 위로 예를 들어, 나는 그들이 동일한 curr_code (999)를 가지고 반환됩니다 ctrl_nbrs 001 + 004 기대 질문에 넣어했습니다. – LuckySevens

답변

1
SELECT ctrl_nbr, 
     curr_code 
FROM ctrl_hdr 
WHERE curr_code IN 
    (SELECT curr_code 
    FROM ctrl_hdr 
    WHERE nbr_sfx = 'A' 
    GROUP BY curr_code HAVING count(ctrl_nbr) > 1) 
+0

미안 해요, 내 질문을 업데이 트됩니다뿐만 아니라 이것을 시도하고 끝이없는 루프를 입력 것으로 보인다. – LuckySevens

+0

count (ctrl_nbr) int 값을 반환하지 않습니다. 문자열을 작성해야합니다. Count (ctrl_nbr)> 1 –

+0

@Arvaan, 네 말이 맞아. 복사 붙여 넣기. :) – yalpertem

1

내가 생각할 수있는 시나리오가 세 가지 있습니다. ,

SELECT c.ctrl_nbr, c.curr_code 
FROM  ctrl_hdr c 
    WHERE EXISTS (-- it is a duplicate 
     SELECT * FROM ctrl_hdr 
     WHERE c.curr_code = curr_code AND c.ctrl_nbr != c2.ctrl_nbr) 
    AND NOT EXISTS (-- it is the last dupicate 
     SELECT * FROM ctrl_hdr 
     WHERE c.curr_code = curr_code AND c.ctrl_nbr < ctrl_nbr) 

그리고 마지막으로 당신을 : 마지막/첫 번째 중복을 선택합니다

SELECT c1.ctrl_nbr, c2.ctrl_nbr, c1.curr_code 
FROM 
    ctrl_hdr c1 INNER JOIN 
    ctrl_hdr c2 ON c1.ctrl_nbr < c2.ctrl_nbr AND c1.curr_code = c2.curr_code 

둘째, 첫 번째

, 당신은 중복 레코드를 찾아 단일 행에 모두 표시 할 첫 번째/마지막을 제외한 모든 중복 레코드를 가져오고 싶습니다.

SELECT c.ctrl_nbr, c.curr_code 
FROM  ctrl_hdr c 
WHERE EXISTS (-- it is non-last duplicate 
     SELECT * FROM ctrl_hdr 
     WHERE c.curr_code = curr_code AND c.ctrl_nbr < ctrl_nbr) 
+0

질문에 관련이없는'WHERE nbr_sfx = 'A''을 생략했습니다. – Bulat