我有一组客户端数据。每个都有一个开始日期和结束日期。客户可以拥有多条具有不同开始日期和结束日期的行。我有另一个包含索赔信息的数据集,我想知道他们是否在状态和结束日期的时间范围内提出了索赔。
我怎么写这个?
SELECT
M.[ID]
,EN.StartDate
,EN.EndDate
,[Has Cliams History] (Column to identify if yes or no)
FROM [Test].[dbo].[tblClients] M
left join [test].[dbo].[tblCliams] EN on EN.ID = M.ID
答案 0 :(得分:0)
为了说明case语句的使用,ClaimDate字段表示声明的日期。查询看起来像这样。
SELECT
M.[ID]
,EN.StartDate
,EN.EndDate
,CASE
WHEN ClaimDate between EN.StartDate AND EN.EndDate THEN 'yes'
ELSE 'no'
END [Has Cliams History]
FROM [Test].[dbo].[tblClients] M
left join [test].[dbo].[tblClaims] EN on EN.ID = M.ID
答案 1 :(得分:0)
您的问题需要更清晰地说明两个表的定义以及两者之间的关系。我猜你实际上并没有加入一个名为ID的列(至少我希望不会)。基于假设您在tblClaims上有ClientID并且您通过NULL EndDate支持正在进行的客户端,这是对它的抨击。还假设在tblClaims上有开始日期和结束日期。
SELECT M.[ID]
, CASE WHEN MAX(claim.ID) IS NOT NULL THEN 1 ELSE 0 END AS HasClaimsHistory
FROM [Test].[dbo].[tblClients] client
LEFT JOIN [Test].[dbo].[tblCliams] claim on client.ID = claim.ClientID
AND claim.StartDate >= client.StartDate
AND (
client.EndDate IS NULL /* ongoing support? */
OR
claim.EndDate <= client.EndDate
)
GROUP BY M.[ID]
, CASE WHEN MAX(claim.ID) IS NOT NULL THEN 1 ELSE 0 END