首页 > 解决方案 > 如何检查其中一个索赔人是否具有状态 0 并根据该状态分配索赔状态

问题描述

每个索赔可以有多个索赔人。如果这些索赔'Open'人中至少有一个拥有ClaimantStatus = 0

因此,我需要检索 Claim Level(不是 Claimants)上的数据并创建ClaimStatus表明 Claim 是Open还是的列Closed

对于每一个ClaimID,我需要检查是否至少有一个 Claimant 拥有ClaimantStatus = 0(Open),如果这是真的,那么列ClaimStatus应该是 = 'Open',否则应该是 ='Closed'

 declare @ClaimsTable table (ClaimID varchar(20))
 insert into @ClaimsTable values ('Claim1'),
                                 ('Claim2'),
                                 ('Claim3'),
                                 ('Claim4')

declare @ClaimantsTable table (ClaimID varchar(20),  ClaimantName varchar(50), ClaimantStatus int)
insert into @ClaimantsTable values ('Claim1','Claimant1',1),
                                   ('Claim1','Claimant2',0),
                                   ('Claim1','Claimant3',1),
                                   ('Claim2','Claimant2',0),
                                   ('Claim3','Claimant1',1),
                                   ('Claim3','Claimant2',1),
                                   ('Claim3','Claimant3',1),
                                   ('Claim4','Claimant1',0),
                                   ('Claim4','Claimant2',0)
--select * from @ClaimantsTable

select ClaimID,
        (select count (ClaimantName) from @ClaimantsTable ct where ct.ClaimID = c.ClaimID) as NumberOfClaimants,
    --below statement does not work correctly
        (select top 1 case when ClaimantStatus in (0) then 'Open' Else 'Closed' end as t from @ClaimantsTable ct where ct.ClaimID = c.ClaimID) as ClaimStatus
from @ClaimsTable c

正确答案应该是这样的:

在此处输入图像描述

标签: sqlsql-servertsqlsql-server-2012

解决方案


看起来一个简单GROUP BY的就足够了。Claim如果至少有一个ClaimantClaimantStatus = 0,则它是打开的,我们可以使用它来MIN确定。在这里,我们依靠ClaimantStatus拥有01价值观。

SELECT
    Claims.ClaimID
    ,COUNT(*) AS NumberOfClaimants
    ,CASE WHEN MIN(Claimants.ClaimantStatus) = 0 
        THEN 'Open' 
        ELSE 'Closed' 
    END AS ClaimStatus
FROM
    @ClaimsTable AS Claims
    INNER JOIN @ClaimantsTable AS Claimants ON Claimants.ClaimID = Claims.ClaimID
GROUP BY
    Claims.ClaimID
ORDER BY
    Claims.ClaimID;

推荐阅读