我可以在where子句的两边使用case表达式吗?

时间:2016-11-23 06:05:20

标签: sql

喜欢这个

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子句的两边使用

1 个答案:

答案 0 :(得分:1)

根据您的查询,上面写着......

CASES 可以最小化为嵌套条件,

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)=@CodeFilter2)
            OR
            (LEN(UMSH.DateOfProcedure)<=4 AND GETDATE() =@CodeFilter2)
            AND @CodeFilter2 IS NOT NULL
        )
        OR
        (LEN(UMSH.DateOfProcedure)<=4 AND @CodeFilter2 IS null)
    )

尝试此查询...希望它提供所需的输出:)