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 行中看到的,空值是可以的,因为根据我的标准,这不会与任何其他行重复重点关注前三列。如果 Column 0 和 Column 1 重复,则 Null 是不行的。第 3 列始终为 NULL,第 4 列是否重复并不重要。最后两行,第 7 行和第 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

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

4

1 回答 1

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 小提琴

在旁注don't use spacescolumn 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
于 2013-03-20T05:00:46.800 回答