如何基于SQL Server 2012的多个值获取每行值
我需要为每个保单号码做一行。但问题在于索赔地位 如果我有超过1个claimCount,那么我需要检查其中一个ClaimStatus='Open' 如果其中一个为“打开”,则整个如何基于SQL Server 2012的多个值获取每行值,sql,tsql,sql-server-2012,Sql,Tsql,Sql Server 2012,我需要为每个保单号码做一行。但问题在于索赔地位 如果我有超过1个claimCount,那么我需要检查其中一个ClaimStatus='Open' 如果其中一个为“打开”,则整个PolicyNumber的ClaimStatus中的值需要为Open,否则ClaimStatus='Closed' 当前结果如下所示: PolicyNumber ClaimCount ClaimStatus --------------------------------------- Pol1
PolicyNumber
的ClaimStatus
中的值需要为Open
,否则ClaimStatus='Closed'
当前结果如下所示:
PolicyNumber ClaimCount ClaimStatus
---------------------------------------
Pol1 2 Closed
Pol1 2 Open
Pol2 2 Closed
Pol2 2 Closed
Pol3 1 Closed
Pol4 3 Open
Pol4 3 Closed
示例代码:
declare @ClaimsTable table (PolicyNumber varchar(50), ClaimCount int, ClaimStatus varchar(50))
insert into @ClaimsTable
values ('Pol1', 2, 'Closed'), ('Pol1', 2, 'Open'),
('Pol2', 2, 'Closed'), ('Pol2', 2, 'Closed'),
('Pol3', 1, 'Closed'),
('Pol4', 3, 'Open'), ('Pol4', 3, 'Closed')
select * from @ClaimsTable
结果应该是这样的:
PolicyNumber ClaimCount ClaimStatus
---------------------------------------
Pol1 2 Closed
Pol1 2 Open
Pol2 2 Closed
Pol2 2 Closed
Pol3 1 Closed
Pol4 3 Open
Pol4 3 Closed
如果只有两个值,可以使用
max()
:
这取决于'Open'
'Closed'
这一事实。更普遍的解决方案可能是:
SELECT policynumber, count(*) AS numclaims,
(CASE WHEN SUM(CASE WHEN claimstatus = 'Open' THEN 1 ELSE END) > 0
THEN 'Open'
ELSE MIN(claimstatus)
END) AS claimstatus
FROM @ClaimsTable
GROUP BY policynumber;
试试这个:
select t.* from (
select *,ROW_NUMBER() over (partition by PolicyNumber order by claimstatus desc) rn
from @ClaimsTable
) t where rn=1
谢谢,但是这个MAX是基于什么?如果同一个保单号码有两个不同索赔状态的索赔,它会选择哪一个?@Oleg。它计算了最大值,如果一个是
'Open'
,另一个是'Closed'
,则最大值为'Open'
。是的。谢谢,我的评论与第一段代码有关。最高(索赔状态)