2016-11-23 70 views
0

像這樣我可以在where子句的兩側使用大小寫表達式嗎?

SELECT * 
    FROM UsersMedicalSurgicalHistory UMSH INNER JOIN CCDTransaction CT on     
              UMSH.SurgicalHistoryId = CT.RowId 
    WHERE (
     (CASE 
      WHEN LEN(UMSH.DateOfProcedure)<=4 THEN UMSH.DateOfProcedure 
      WHEN LEN(UMSH.DateOfProcedure)=0 THEN UMSH.DateOfProcedure 
      END 
      = 
      CASE WHEN @CodeFilter3 IS not null THEN @CodeFilter3 
      ELSE UMSH.DateOfProcedure end) 
     OR 
     (CASE 
      WHEN LEN(UMSH.DateOfProcedure)>4 THEN  
       CONVERT(datetime,UMSH.DateOfProcedure,101) 
      ELSE GETDATE() 
      END 
      = 
      CASE WHEN @CodeFilter2 IS not null THEN @CodeFilter2 
      ELSE GETDATE() 
      END) 
     ) 

所以這個問題就像CASE表達式可以在where子句

+2

格式化您的代碼。 – CollinD

+2

我不認爲你可以做到這一點。 –

+1

@pavankumar,你不能比較任何隨機猜測與任何其他隨機猜測...其中一方必須是恆定的 – Vikrant

回答

1

根據您的查詢上面寫的......

案例可兩側使用最小化爲嵌套條件,因爲

SELECT * FROM UsersMedicalSurgicalHistory UMSH 
INNER JOIN CCDTransaction CT on UMSH.SurgicalHistoryId = CT.RowId 
WHERE (
     (UMSH.DateOfProcedure = @CodeFilter3 and @CodeFilter3 IS not null) 
     OR 
     @CodeFilter3 IS null 
    ) 
    OR 
    (
     (
      (LEN(UMSH.DateOfProcedure)>4 AND CONVERT(datetime,UMSH.DateOfProcedure,101)[email protected]) 
      OR 
      (LEN(UMSH.DateOfProcedure)<=4 AND GETDATE() [email protected]) 
      AND @CodeFilter2 IS NOT NULL 
     ) 
     OR 
     (LEN(UMSH.DateOfProcedure)<=4 AND @CodeFilter2 IS null) 
    ) 

試試這個問題... hope it gives desired輸出:)

+1

@pavankumar,它是最大限度減少查詢,這是一個理想的解決方案..? – Vikrant

+0

這解決了我的問題 –

+1

@pavankumar,解決了你的問題..沒有? – Vikrant

相關問題