SQL Server:帮助删除交替行中的重复项

时间:2013-03-20 04:41:49

标签: sql sql-server join null duplicates

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

我需要从名为combined的表中删除重复的行。但是,并非所有行都是重复的,每列中的重复行也不相同。示例重复是第2行和第3行。删除的条件是,如果存在一个行,其中第0列和第1列(这些是实际的列标题)是相同的,保留第2列中具有值的行,删除该行如果存在重复行,并且列0和列1和列2中的值存在,则列2中为NULL。如第2列第6行所示,空值可以,因为根据我的条件,这与任何其他行不重复重点关注前三列。如果第0列和第1列重复,则Null不正常。第3列始终为NULL,列4是否重复无关紧要。最后两行,第7行和第8行也是重复的。我想保留第7行,因为它在第2列中有一个值。

添加预期结果

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

在所需的结果中,第2行和第8行已被删除。

1 个答案:

答案 0 :(得分:4)

试试这个:

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

don't use spaces的旁注column names。如果你真的想要使用空间  然后使用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