首页 文章

SQL Server:CASE WHEN ORTER ELSE END =>不支持OR

提问于
浏览
507

不支持 CASE 语句的 WHEN 子句中的 OR . 我怎样才能做到这一点?

CASE ebv.db_no 
    WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500' 
    ELSE 'WECS 9520' 
END as wecs_system

10 回答

  • 964
    SELECT
      Store_Name,
      CASE Store_Name
        WHEN 'Los Angeles' THEN Sales * 2
        WHEN 'San Diego' THEN Sales * 1.5
        ELSE Sales
        END AS "New Sales",
      Txn_Date
    FROM Store_Information;
    
  • 54

    该格式要求您使用以下任一种:

    CASE ebv.db_no 
      WHEN 22978 THEN 'WECS 9500' 
      WHEN 23218 THEN 'WECS 9500'  
      WHEN 23219 THEN 'WECS 9500' 
      ELSE 'WECS 9520' 
    END as wecs_system
    

    否则,使用:

    CASE  
      WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500' 
      ELSE 'WECS 9520' 
    END as wecs_system
    
  • 25
    Select s.stock_code,s.stock_desc,s.stock_desc_ar,
    mc.category_name,s.sel_price,
    case when s.allow_discount=0 then 'Non Promotional Item' else 'Prmotional 
    item' end 'Promotion'
    From tbl_stock s inner join tbl_stock_category c on s.stock_id=c.stock_id
    inner join tbl_category mc on c.category_id=mc.category_id
    where mc.category_id=2 and s.isSerialBased=0
    
  • 226

    尝试

    CASE WHEN ebv.db_no IN (22978,23218,23219) THEN 'WECS 9500' ELSE 'WECS 9520' END
    
  • 2
    select id,phno,case gender
    when 'G' then 'M'
    when 'L' then 'F'
    else
    'No gender'
    end
    as gender 
    from contacts
    
  • 29
    CASE
      WHEN ebv.db_no = 22978 OR 
           ebv.db_no = 23218 OR
           ebv.db_no = 23219
      THEN 'WECS 9500' 
      ELSE 'WECS 9520' 
    END as wecs_system
    
  • 2

    您可以使用WHEN具有的表达式之一,但不能将它们混合使用 .

    • WHEN when_expression

    是一个简单的表达式,当使用简单的CASE格式时,input_expression将与之进行比较 . when_expression是任何有效的表达式 . input_expression和每个when_expression的数据类型必须相同或必须是隐式转换 .

    • WHEN Boolean_expression

    使用搜索的CASE格式时是否计算布尔表达式 . Boolean_expression是任何有效的布尔表达式 .

    你可以编程:

    1 .

    CASE ProductLine
                WHEN 'R' THEN 'Road'
                WHEN 'M' THEN 'Mountain'
                WHEN 'T' THEN 'Touring'
                WHEN 'S' THEN 'Other sale items'
                ELSE 'Not for sale'
    

    2 .

    CASE
                WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
                WHEN ListPrice < 50 THEN 'Under $50'
                WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
                WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
                ELSE 'Over $1000'
              END
    

    但无论如何,您可以预期变量排名将在布尔表达式中进行比较 .

    CASE (Transact-SQL)(MSDN) .

  • 43

    关于 CASE 已经有很多答案了 . 我将解释何时以及如何使用 CASE .

    您可以在SQL查询中的任何位置使用CASE表达式 . CASE表达式可以在SELECT语句,WHERE子句,Order by子句,HAVING子句,Insert,UPDATE和DELETE语句中使用 .

    CASE表达式具有以下两种格式:

    • 简单CASE表达式
    CASE expression
    WHEN expression1 THEN Result1
    WHEN expression2 THEN Result2
    ELSE ResultN
    END
    

    这会将表达式与一组简单表达式进行比较,以查找结果 . 此表达式将表达式与每个WHEN子句中的表达式进行比较以获得等效性 . 如果WHEN子句中的表达式匹配,则返回THEN子句中的表达式 .

    这是OP的问题正在下降的地方 . 22978 OR 23218 OR 23219 将不会获得等于表达式的值,即ebv.db_no . 这就是它给出错误的原因 . input_expression和每个when_expression的数据类型必须相同或必须是隐式转换 .

    • 搜索CASE表达式
    CASE
    WHEN Boolean_expression1 THEN Result1
    WHEN Boolean_expression2 THEN Result2
    ELSE ResultN
    END
    

    此表达式计算一组布尔表达式以查找结果 . 此表达式允许在每个布尔表达式中使用比较运算符和逻辑运算符AND / OR .

    1.SELECT语句与CASE表达式

    --Simple CASE expression: 
    SELECT FirstName, State=(CASE StateCode
     WHEN 'MP' THEN 'Madhya Pradesh' 
     WHEN 'UP' THEN 'Uttar Pradesh' 
     WHEN 'DL' THEN 'Delhi' 
     ELSE NULL 
     END), PayRate
    FROM dbo.Customer
    
    -- Searched CASE expression:
    SELECT FirstName,State=(CASE 
     WHEN StateCode = 'MP' THEN 'Madhya Pradesh' 
     WHEN StateCode = 'UP' THEN 'Uttar Pradesh' 
     WHEN StateCode = 'DL' THEN 'Delhi' 
     ELSE NULL 
     END), PayRate
    FROM dbo.Customer
    

    2.使用CASE表达式的更新语句

    -- Simple CASE expression: 
    UPDATE Customer 
    SET StateCode = CASE StateCode
     WHEN 'MP' THEN 'Madhya Pradesh' 
     WHEN 'UP' THEN 'Uttar Pradesh' 
     WHEN 'DL' THEN 'Delhi' 
     ELSE NULL 
     END 
    
    -- Simple CASE expression: 
    UPDATE Customer 
    SET StateCode = CASE 
     WHEN StateCode = 'MP' THEN 'Madhya Pradesh' 
     WHEN StateCode = 'UP' THEN 'Uttar Pradesh' 
     WHEN StateCode = 'DL' THEN 'Delhi' 
     ELSE NULL 
     END
    

    带有CASE表达式的3.ORDER BY子句

    -- Simple CASE expression: 
    SELECT * FROM dbo.Customer
    ORDER BY 
     CASE Gender WHEN 'M' THEN FirstName END Desc,
     CASE Gender WHEN 'F' THEN LastName END ASC
    
    -- Searched CASE expression: 
    SELECT * FROM dbo.Customer
    ORDER BY 
     CASE WHEN Gender='M' THEN FirstName END Desc,
     CASE WHEN Gender='F' THEN LastName END ASC
    

    4.带有CASE表达式的子句

    -- Simple CASE expression: 
    SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate)
    FROM dbo.Customer
    GROUP BY StateCode,Gender,FirstName
    HAVING (MAX(CASE Gender WHEN 'M' 
     THEN PayRate 
     ELSE NULL END) > 180.00
     OR MAX(CASE Gender WHEN 'F' 
     THEN PayRate 
     ELSE NULL END) > 170.00)
    
    -- Searched CASE expression: 
    SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate)
    FROM dbo.Customer
    GROUP BY StateCode,Gender,FirstName
    HAVING (MAX(CASE WHEN Gender = 'M' 
     THEN PayRate 
     ELSE NULL END) > 180.00
     OR MAX(CASE WHEN Gender = 'F' 
     THEN PayRate 
     ELSE NULL END) > 170.00)
    

    希望这个用例将来会对某人有所帮助 .

    Source

  • 31
    UPDATE table_name 
      SET column_name=CASE 
    WHEN column_name in ('value1', 'value2',.....) 
      THEN 'update_value' 
    WHEN column_name in ('value1', 'value2',.....) 
      THEN 'update_value' 
    END
    
  • -5
    CASE WHEN ebv.db_no  IN (22978, 23218, 23219) THEN 'WECS 9500' 
      ELSE 'WECS 9520' 
    END as wecs_system
    

相关问题