如何基于SQL Server 2012的多个值获取每行值

如何基于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

我需要为每个保单号码做一行。但问题在于索赔地位

如果我有超过1个claimCount,那么我需要检查其中一个ClaimStatus='Open'

如果其中一个为“打开”,则整个
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'
。是的。谢谢,我的评论与第一段代码有关。最高(索赔状态)