带 OR 的 SQL CASE 语句?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/23768717/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-01 01:54:45  来源:igfitidea点击:

SQL CASE statement with OR?

sqlsql-server-2008

提问by user2125348

Say I have to following:

说我必须遵循:

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

Is it possible to add an or and do something along the lines of:

是否可以添加一个 or 并执行以下操作:

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

回答by p.s.w.g

There are two forms of CASEexpression, 'searched' and 'simple'. You can't use an ORwith a 'simple' CASEexpression, but you can with the 'searched' form:

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

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

Or even

甚至

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

回答by Yuriy Galanter

You can use alternative form of CASE

您可以使用 CASE 的替代形式

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

回答by dasblinkenlight

CASEexpression has two kinds of syntax - the simple (i.e. one that you are showing), and the searched, with multiple logical conditions. If you would like to use an OR, you need the second kind:

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

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

Here is the description from the documentation:

这是文档中的描述:

  • The simple CASE expression compares an expression to a set of simple expressions to determine the result.
  • The searched CASE expression evaluates a set of Boolean expressions to determine the result.
  • 简单 CASE 表达式将一个表达式与一组简单表达式进行比较以确定结果。
  • 搜索的 CASE 表达式评估一组布尔表达式以确定结果。

回答by Siddhardha

Try this. This would work for your scenario.

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

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