2013-03-20 4 views
2
Column 0 Column 1  Column 2 Column 3 Column 4 
csus  00287y109  38   NULL  169 
mbus  01185pag4  NULL  NULL  1 
mbus  01185pag4  100   NULL  18 
mbus  018033DR8  100   NULL  5 
psus  20002309  26   NULL  5 
cbus  025816aq2  NULL  NULL  169 
cdus  02586tbj2X  101   NULL  1 
cdus  02586tbj2X  NULL  NULL  1 

이 테이블에서 중복 된 행을 제거해야합니다. 그러나 모든 행이 복제되는 것은 아니며 모든 열에서 중복 행이 동일하지는 않습니다. 중복 예제는 행 ​​2와 행 3입니다. 제거 기준은 열 0과 열 1 (실제 열 머리글)이 동일한 행이 존재하는 경우 열 2에 값이있는 행을 유지하고 행을 삭제합니다 열 0과 열 1 및 열 2에 값이있는 중복 행이있는 경우 열 2에 NULL이 있습니다. 열 2 행 6에서 볼 수 있듯이 null 값은 내 기준에 따라 다른 행과 중복되지 않기 때문에 괜찮습니다. 처음 세 개의 열에 초점을 맞 춥니 다. 열 0과 열 1이 중복되면 Null이 올바르지 않습니다. 열 3은 항상 NULL이고 열 4가 중복되는지 여부는 중요하지 않습니다. 마지막 두 행, 행 7과 8도 복제됩니다. 이 열 2.SQL Server : 행을 번갈아 중복 제거하는 방법

추가 예상 된 결과 원하는 결과 행 2 행 8에서

Column 0 Column 1  Column 2 Column 3 Column 4 
csus  00287y109  38   NULL  169 
mbus  01185pag4  100   NULL  18 
mbus  018033DR8  100   NULL  5 
psus  20002309  26   NULL  5 
cbus  025816aq2  NULL  NULL  169 
cdus  02586tbj2X  101   NULL  1 

제거 된에 값을 가지고 있기 때문에 나는 7 행을 유지하려는 것이다.

+0

HTTP 사용 공간 를 사용하려면 .If : // 유래를 .com/questions/7565664/방법 - 제거 - 모두 -하지만 - 일부 - 레코드를 기반으로 임계 값/7565818 # 7565818 –

답변

4

이 시도 : column names에서 보조 노트 don't use spaces

with cte as 
(
Select * , 
row_number() over (partition by [Column 0],[Column 1] order by [Column 2] desc) rn 
from Sample 
) 
Select * from cte 
where rn=1 

데모 SQL FIDDLE

당신이 정말로 다음 underscore

Updated 

;with cte as 
( 
    Select * , 
    row_number() over (partition by [Column 0],[Column 1] order by [Column 2] desc) rn 
    from Sample 
) 
Insert into final 
Select [Column 0], [Column 1], [Column 2], [Column 3] , [Column 4] 
from cte 
where rn=1 
+0

헤더의 공백에 대해서는 동의하지만 헤더를 변경할 수는 없습니다. –

+0

이것이 효과가있을 것 같습니다. 좀 더 연구해야합니다. 고맙습니다. –

+1

해결책이 효과적입니다. 나는 그것을 대답으로 표시했다. 나는 당신이 그런 간결한 질문으로 대답 할 수 있었는지 놀랍습니다. –

관련 문제