参考上图。我有表诊断,服务和预防服务,其中我在诊断和PreventativeServices中有一个名为DxCode的公共字段。 PreventativeServices表中的DxCode是一个可选字段,因为它充当我们的配置表。假设DxCode = DiagnosisCode,我有以下场景,基于图像:
如果我们在服务和诊断表中都有DxCode,那么在DxCode上进行比较,结果行应输出比较。如果找到输出将是10060否则没有行。
如果我们在PreventativeServices中有DxCode = null或空白,那么再次输出将是10060。
如果我们的诊断表中没有针对RegistrationId = 247237的行,但我们在PreventativeServices中有一行以及诊断代码,那么结果将再次没有行,否则
out put将是10060
我有以下查询:
SELECT [ServiceID] AS PreventativeServiceId,
[CPTCode]
FROM PreventativeService ps
INNER JOIN [Services] s(NOLOCK)
ON ps.CPTCode = s.ServiceCode
LEFT JOIN Diagnoses dx(NOLOCK)
ON dx.RegistrationID = s.RegistrationID
WHERE s.RegistrationId = @RegistrationId
AND ps.IsActive = 1
AND @AdmitDate BETWEEN ps.StartDate AND Isnull(PS.EndDate, @AdmitDate)
AND @Gender = Isnull(ps.Gender, @Gender)
AND @Age BETWEEN Isnull(ps.AgeFrom, @Age) AND Isnull(ps.AgeTo, @Age)
AND dx.DiagnosisCode = ( CASE
WHEN Rtrim(Ltrim(ps.DiagnosisCode)) = '' THEN dx.DiagnosisCode
ELSE ps.DiagnosisCode
END )
注意
PreventativeServices中的DiagnosisCode也将包含null和空白。
要求
dx.DiagnosisCode = ( CASE
WHEN Rtrim(Ltrim(ps.DiagnosisCode)) = '' THEN dx.DiagnosisCode
ELSE ps.DiagnosisCode
END )
如果在PreventativeServices中有空白('')诊断且在诊断表中没有行,方案失败了
答案 0 :(得分:0)
好的,这是因为null = null总是返回false。您可以尝试使用isnull函数。
isnull(dx.DiagnosisCode,' ') = (
CASE
WHEN rtrim(ltrim(ps.DiagnosisCode)) = ''
THEN isnull(dx.DiagnosisCode,' ')
ELSE ps.DiagnosisCode
END
)