我正在尝试合并两个表。我试图找到的是一个人是否有积极的计划。这是一个人可以注册和停止的东西。
从表一,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上运行查询。
答案 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;