在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
答案 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