根据其他列中的值删除重复项

时间:2020-09-24 16:36:50

标签: sql sql-server visual-studio-code

在MS Visual Studio中,我具有下表1,在该表中,我要基于PrimIndicator列删除重复的caseNum。如果案例号具有重复的caseNum,我想使用“ True” PrimIndicator保留该行,如果caseNum不是重复的,则保留CaseNum。

表1:

ID  CaseNum PrimIndicator
1   AAA-123 TRUE
2   AAA-123 FALSE
3   BBB-546 
4   CCC-753 TRUE
5   CCC-753 
6   ABC-347 
7   DEF-546 TRUE
8   DEF-346 

想要表格2:

ID  CaseNum PrimIndicator
1   AAA-123 TRUE
3   BBB-546 
4   CCC-753 TRUE
6   ABC-347 
7   DEF-546 TRUE

到目前为止,我已经尝试过了,但是如果PrimIndicator为空白,则max()函数似乎无法正常工作。

Select ID, distinct CaseNum, Max(PrimIndicator)
from Table1
group by CaseNum, PrimIndicator

2 个答案:

答案 0 :(得分:1)

如果每个casenum只需要一行,我建议row_number()

select t.*
from (select t.*,
             row_number() over (partition by casenum
                                order by case when primeindicator = 'true' then 1 else 2 end
                               ) as seqnum
      from t
     ) t
where seqnum = 1;

保证结果集中的每casenum行。

鉴于您的数据,您还可以使用where逻辑:

select t.*
from t
where t.primeindicator = 'true' or 
      not exists (select 1
                  from t t2
                  where t2.casenum = t.casenum and
                        t2.primeindicator = 'true'
                 );

这不能保证每个casenum都有一行-但这确实适用于您提供的数据。

答案 1 :(得分:0)

您可以使用窗口功能:

select *
from (select t.*, count(*) over(partition by casenum) cnt from table1 t) t
where t.primindicator = 'true' or cnt = 1