组合两个表并仅过滤最后一个日期

时间:2017-08-21 20:43:45

标签: sql-server datefilter

我正在尝试合并两个表。我试图找到的是一个人是否有积极的计划。这是一个人可以注册和停止的东西。

从表一,Persons,我就是这些专栏:

PerID    FacID
 993     Fac1
1052     Fac1
1163     Fac2

从表二,PlanDates,我就是这些专栏:

PerID   FacID   StartDt                     EndDt
 993    Fac1    2017-07-01 00:00:00.000     2017-07-31 00:00:00.000
 993    Fac1    2017-08-05 00:00:00.000     NULL
1053    Fac1    NULL                        NULL
1163    Fac2    2017-08-01 00:00:00.000     NULL

我正在运行此查询

Select
  A.PerID
  ,A.FacID
  ,B.PerID
  ,iif(CASE WHEN B.StartDt IS NULL THEN 'FALSE' ELSE 'TRUE' END = 'True', iif(CASE WHEN B.EndDt IS NULL THEN 'FALSE' ELSE 'TRUE' END = 'False', 'Plan A', 'None'),'None') AS [Plan Code]
  ,B.FacID
From
  Persons A
  Left Join PlanDates B
    On A.PerID = B.PerID
    And A.FacID = B.FacID

我得到的结果是:

PerID   Plan Code
 993    None
 993    Plan A
1052    None
1163    Plan A

我希望没有PerID 993的第一个结果。

我在查询中使用iif语句的原因是使日期为布尔值。

我包含了FacID,因为当一个人访问靠近另一个位置时,一些PerID位于多个位置。

我在SQL Server上运行查询。

1 个答案:

答案 0 :(得分:0)

看看这是否给出了您正在寻找的结果......

SELECT 
    p.PerID,
    p.FacID,
    PlanCode = CASE 
                    WHEN EXISTS (               
                                SELECT 
                                    1
                                FROM 
                                    dbo.PlanDates pd
                                WHERE 
                                    p.PerID = pd.PerID
                                    AND p.FacID = pd.FacID
                                    AND pd.StartDT IS NOT NULL 
                                    AND pd.EndDt IS NULL )
                    THEN 'Plan A'
                    ELSE 'None'
                END
FROM
    dbo.Person p;