【问题标题】:Contradictory condition checks on Where with a Case Statement使用案例语句对 Where 进行矛盾条件检查
【发布时间】:2016-11-24 21:50:30
【问题描述】:

我想使用 CASE 检查同一字段的 WHERE 子句中的两个矛盾条件;

如果我提取我想要的东西,显示如下

WHERE FULFILMENT_STATUS_CODE != 'CNL'
WHERE FULFILMENT_STATUS_CODE = 'FUL'

我尝试(并且想要)如下方式,但我想知道如何在她身上拥有 !=

WHERE
    FULFILMENT_STATUS_CODE =
    CASE @pFILTER_TYPE
        WHEN 1 THEN 'CNL' 
        WHEN 2 THEN 'FUL' 
    END

【问题讨论】:

    标签: sql tsql sql-server-2005


    【解决方案1】:

    不要在WHERE 中使用CASE,而是在ORAND 中使用:

    WHERE 
        ( @pFILTER_TYPE = 1 AND FULFILMENT_STATUS_CODE <> 'CNL' )
    OR 
        ( @pFILTER_TYPE = 2 AND FULFILMENT_STATUS_CODE = 'FUL' )
    

    但您也可以在这个存储过程中使用IF...ELSE 来处理两个不同的查询,而不是评估每条记录的参数。这更冗长但也更有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      相关资源
      最近更新 更多