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行已被删除。
答案 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
在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