根据不同列中的值删除重复项

Remove duplicates based on a value from a different column

在 MS Visual Studio 中,我有以下 table 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

您可以使用 window 函数:

select *
from (select t.*, count(*) over(partition by casenum) cnt from table1 t) t
where t.primindicator = 'true' or cnt = 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 一行 - 但它确实适用于您提供的数据。