这让我很困惑。我正在尝试使用 case 语句创建一个返回 1 或 0 的列,具体取决于搜索医院站点/病房的两列是否不在表/变量中的值列表中,如果两列表示是否出于某种原因取消了前往所述医院地点/病房的旅程。此计数列称为 [Journeys Other],因为它代表发生在除其他 4 个特定站点之一之外的任何地方的所有救护车旅程。这就是为什么下面的案例声明要求它检查不在预定义列表中的任何医院和站点。
问题是; 查询没有按照我对第二列的要求进行;[来自医院的文字]。它在与预定义列表中的条目匹配的计数列中返回 1。它适用于第一列 [Requestee Name],因为没有匹配项。但是第二列搜索也可能不存在。它快把我逼疯了。
我已经从更大的主要查询中提取了它,以显示我到目前为止所做的事情;
SELECT [Journey ID]
, [Start Date]
, [Requestee Name]
, [From hospital text]
, [Abort Reason Text]
, [CANCEL REASON TEXT]
, CASE
WHEN [Requestee Name] NOT IN (ISNULL(mts.MatchingSite, ''))
AND ([From hospital text] NOT IN (ISNULL(mts.MatchingSite, '')) OR [From hospital text] IS NULL)
AND COALESCE([Abort Reason Text], [CANCEL REASON TEXT]) IS NULL THEN 1
ELSE 0
END AS [JOURNEYS OTHER]
From AE.dbo.PTS_MDSForReporting1415 mds LEFT JOIN @MatchesReq mts
ON mds.[Requestee Name] = mts.MatchingSiteReq
WHERE [ECR Flag]='0'
AND [Service Type Text] = 'Pallative Day'
AND [CCG] in ('Leeds North Ccg','Leeds South And East Ccg','Leeds West Ccg')
AND [Start Date] >= '01-JULY-2014'
因此,当我运行它时,由 case 语句创建的 [Journeys Other] 列对不符合条件的行有一个 1。
以下是一些示例行;
Journey ID Start Date Requestee Name From hospital text Abort Reason Text CANCEL REASON TEXT JOURNEYS OTHER
6630679 2014-07-08 00:00:00.000 Dales Ward St Gemmas Hospice NULL NULL 1
6633083 2014-07-10 00:00:00.000 Moors Ward St Gemmas Hospice NULL NULL 1
6644723 2014-07-12 00:00:00.000 J84 Thoracic's St James Hospital Leeds NULL NULL 1
6676438 2014-07-22 00:00:00.000 Day Unit Wheatfields Hospice NULL NULL 1
6675840 2014-07-22 00:00:00.000 Discharge Wheatfields Hospice NULL NULL 1
6694026 2014-07-28 00:00:00.000 Dales Ward St Gemmas Hospice NULL NULL 1
6693591 2014-07-28 00:00:00.000 Day Unit Bexley Wing (St James) NULL NULL 1
6693590 2014-07-28 00:00:00.000 Day Unit Wheatfields Hospice NULL NULL 1
6695586 2014-07-28 00:00:00.000 Day Unit Wheatfields Hospice NULL NULL 1
所有这些行在我的表变量的医院/站点列表中的 [From hospital text] 中都有一个医院/站点。由于与该列匹配,因此应根据 case 语句的 ELSE 条件将它们标记为 0。
如果它很重要;表变量中的值比我在几行结果中展示的要多得多,其中一些被查询正确拾取并在匹配的地方标记为零,所以它似乎完全被命中和错过. 唯一始终正确的行是匹配发生在 [Requestee Name] 中的位置,然后第二个 AND 条件为真或不为真(合并在一起时为 NULL 或 NOT NULL。)它必须考虑 BOTH 列中的值的那一刻,它并不总是适用于两者中的第二个。
我一生都无法弄清楚为什么在将表变量与 [From hospital text] 列进行比较时,case 语句的行为不符合预期。任何建议将不胜感激!!