2014-12-26 107 views
1

enter image description here 參考上面的圖像。我有診斷,服務和預防性服務,其中我有一個共同的字段名爲DxCode診斷和預防性服務。 PreventativeServices表中的DxCode是一個可選字段,因爲它充當我們的配置表。假設DxCode = DiagnosisCode,我已經基於圖像下列情況下,:以下情景的匹配標準

  1. 如果我們在兩個服務和診斷表有DxCode然後比較它DxCode和由此產生的行應該是可比較的輸出。如果發現輸出將是10060否則不行。

  2. 如果我們有DxCode = null或空白PreventativeServices然後再輸出將是10060

  3. 如果我們沒有在我們對RegistrationId = 247237診斷表中的行,但我們一起在PreventativeServices一排診斷代碼然後再最終會排不出,否則

  4. 出認沽將是相同的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) 

注意

DiagnosisCode在PreventativeServices將包含null和空白也是如此。

要求

dx.DiagnosisCode = (CASE 
         WHEN Rtrim(Ltrim(ps.DiagnosisCode)) = '' THEN dx.DiagnosisCode 
         ELSE ps.DiagnosisCode 
        END) 

失敗的情況下,當我有空白( '')診斷PreventativeServices和診斷表沒有行

+0

您在PreventativeService表中的服務表和CPTCode中是否有對應的registrationId和Service代碼? –

+0

服務表中的ServiceCode等於預防性服務的CPTCode,服務中的註冊ID等於診斷表中的註冊ID。這是三個表如何相關 –

回答

1

OK,這是因爲空= NULL總是返回假。你可以嘗試使用isnull函數。

isnull(dx.DiagnosisCode,' ') = (
    CASE 
     WHEN rtrim(ltrim(ps.DiagnosisCode)) = '' 
      THEN isnull(dx.DiagnosisCode,' ') 
     ELSE ps.DiagnosisCode 
     END 
    ) 
+0

Thaxs,將盡快更新你 –

+0

謝謝,它的工作 –