sql - 如何检查其中一个索赔人是否具有状态 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
正确答案应该是这样的:
解决方案
看起来一个简单GROUP BY
的就足够了。Claim
如果至少有一个Claimant
ClaimantStatus = 0,则它是打开的,我们可以使用它来MIN
确定。在这里,我们依靠ClaimantStatus
拥有0
和1
价值观。
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;
推荐阅读
- stm32 - 外部 Flash Loader 链接器脚本文件
- java - 如何从活动中调用片段方法?
- azure - 如何在 azure devops pipline 中为 py 脚本调用 repo 路径
- android - 如何在 Flutter 上正确访问应用图标?
- python - 我需要通过 boto3 Lambda 函数在新创建的实例的响应中获取公共 IPv4 地址和解密的密钥对吗?
- javascript - 如何使用正则表达式javascript比较对象中的动态字符串和静态字符串
- c# - .net 6.0 RijndaelManaged 加密不能正确解密?
- vscode-extensions - 如何从 VS 代码扩展中获取活动编辑器的验证结果?
- python - Python:在 AWS lambda 上使用 win32 库
- java - 优化消除流程复杂性