带OR的SQL CASE语句?

时间:2014-05-20 19:53:38

标签: sql sql-server-2008

说我必须遵循:

Select OrderID = 
    Case OrderID 
        When 1 Then 'Customer1'
        When 2 Then 'Customer2'
        When 3 Then 'Customer2'
        Else 'Unknown Customer'
    End 
From OrdersPlaced

是否可以添加或执行以下操作:

Select OrderID = 
    Case OrderID 
        When 1 Then 'Customer1'
        When 2 Or 3 Then 'Customer2'
        Else 'Unknown Customer'
    End 
From OrdersPlaced

4 个答案:

答案 0 :(得分:10)

CASE表达有两种形式,'搜索'和'简单'。您不能将OR与“简单”CASE表达式一起使用,但您可以使用“已搜索”表单:

Case  
    When OrderID = 1 Then 'Customer1'
    When OrderID = 2 Or
         OrderID = 3 Then 'Customer2'
    Else 'Unknown Customer'
End 

甚至

Case  
    When OrderID = 1 Then 'Customer1'
    When OrderID IN (2, 3) Then 'Customer2'
    Else 'Unknown Customer'
End 

答案 1 :(得分:2)

您可以使用CASE的替代形式

Select OrderID = 
    Case 
        When OrderID = 1 Then 'Customer1'
        When OrderID = 2 Or OrderID = 3 Then 'Customer2'
        Else 'Unknown Customer'
    End 
From OrdersPlaced

答案 2 :(得分:1)

CASE表达式有两种语法 - 简单(即您正在显示的语法)和搜索的语法,具有多种逻辑条件。如果您想使用OR,则需要第二种:

Select OrderID = 
    Case 
        When OrderID =1 Then 'Customer1'
        When OrderID =2 Or OrderID =3 Then 'Customer2'
        Else 'Unknown Customer'
    End 
From OrdersPlaced

以下是documentation

的说明
  • 简单的CASE表达式将表达式与一组简单表达式进行比较,以确定结果。
  • 搜索到的CASE表达式计算一组布尔表达式以确定结果。

答案 3 :(得分:1)

试试这个。这适用于您的场景。

Select OrderID = 
    Case
        When OrderID  = 1 Then 'Customer1'
        When OrderID in (2, 3) Then 'Customer2'
        Else 'Unknown Customer'
    End 
From OrdersPlaced