如何在 SQL Server 的 Where 子句中使用 case 语句

Posted

技术标签:

【中文标题】如何在 SQL Server 的 Where 子句中使用 case 语句【英文标题】:How to use case Statement in Where Clause in SQLserver 【发布时间】:2014-02-27 21:05:35 【问题描述】:

我需要我的查询来检查基于客户状态的某些条件

样本数据:

Table  A
    A_ID Customer_ID  Department  Feild  Case1 Case2 
     1       101           X       A      FX1   Zx1
     2       102           Y       B      FX2   ZX2
     3       103           Z       C      FX3   ZX3
  Table  B ---- 
        B_ID      Customer_ID   Status  Feild  Match_Feild   Case1  Case2 
         1            101         C      Null      A          FX1    ZX1
         2            101       Manual    A        AX         FX0    ZX0

在我的情况下,如果状态是手动的,那么在 where 条件下我需要单独与 Feild 检查 否则我需要检查其他两个条件

在哪里 当 Status ='Manual' 然后 a.feild = b.feild 的情况 别的 a.Case1 = b.Case1 和 a.案例2 = B.案例2 结束。

我不知道如何把它放在我的查询中

【问题讨论】:

NULL 是什么意思?是否要剩余记录 Feild 应该是 Field 吗? Status,Case1和Case2,哪些列可以为空? 【参考方案1】:
    where (Status = 'Manual' and a.feild = b.feild ) 
          OR 
          (Status<> 'Manual' AND a.Case1 = b.Case1 and a.Case2 = B.case2)

【讨论】:

OR 1=1 将始终将条件视为成功。

以上是关于如何在 SQL Server 的 Where 子句中使用 case 语句的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 2008 的 where 子句中仅比较日期并忽略时间

如何在 SQL Server where 子句中使用表值函数

XML 值的 SQL Server Where 子句路径

SQL Server:如何将 UNION 与两个都有 WHERE 子句的查询一起使用?

SQL Server If 条件在 where 子句?

SQL Server 中带条件的 Where 子句