2015-04-02 100 views
0

我有一組客戶端數據。每個人都有一個開始日期和結束日期。一個客戶可以有多個不同的開始日期和結束日期。我有另一個數據集與索賠信息,我想知道他們是否有索賠期間的狀態和結束日期。使用日期的案例聲明

我該怎麼寫?

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

tblClaims是否也有一個日期字段關聯索賠的日期? – TheRk 2015-04-02 17:20:42

+0

是的。 @TheRk – Amaury 2015-04-03 15:22:07

回答

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 
+0

Hi @Amaury如果這個或任何答案已解決您的問題,請點擊複選標記,考慮[接受它](http://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 – WorkSmarter 2015-04-02 21:29:15

+0

謝謝@worksmarter – Amaury 2015-04-03 15:22:29

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 
+0

謝謝@scottSmith – Amaury 2015-04-03 15:22:53