【问题标题】:Oracle SQL - CASE syntaxOracle SQL - CASE 语法
【发布时间】:2018-06-05 13:18:13
【问题描述】:

假设这个查询运行良好:

SELECT 
   first_name,
   consultant_id,
   CASE consultant_id
    WHEN 1 THEN 'First Consultant'
    WHEN 2 THEN 'Second Consultant'
   END
FROM consultant
ORDER BY first_name;

为什么我不能使用一些布尔逻辑添加另一个 WHEN 子句,而不是上面两个 WHEN 子句中隐含的等于?例如:

SELECT 
   first_name,
   consultant_id,
   CASE consultant_id
    WHEN 1 THEN 'First Consultant'
    WHEN 2 THEN 'Second Consultant'
    WHEN BETWEEN 3 AND 12 THEN 'Everyone else'
   END
FROM consultant
ORDER BY first_name;

抛出此错误:

ORA-00936: missing expression
00936. 00000 -  "missing expression"
*Cause:    
*Action:
Error at Line: 7 Column: 10

有没有办法在不使用更详细的情况下完成这项工作:

SELECT 
   first_name,
   consultant_id,
   CASE 
    WHEN consultant_id = 1 THEN 'First Consultant'
    WHEN consultant_id = 2 THEN 'Second Consultant'
    WHEN consultant_id BETWEEN 3 AND 12 THEN 'Everyone else'
   END
FROM consultant
ORDER BY first_name;

【问题讨论】:

  • 你现在的答案。 “更详细”的方法是您需要使用的。
  • 那么WHEN子句只能处理隐含的'等于'逻辑?
  • @ConnerM.:正确,如果您需要其他任何内容,则不能使用“短版”
  • 为什么投反对票?

标签: sql oracle case-when booleanquery


【解决方案1】:

是的,你是对的,很遗憾,短语法中不可能有条件。

documentation 调用短语法“simple_case_expression”

CASE expr WHEN comparision_expr THEN return_expr

【讨论】:

    【解决方案2】:

    另外,根据您的要求,您可以使用:

    SELECT
       first_name,
       consultant_id,
       CASE consultant_id
        WHEN 1 THEN 'First Consultant'
        WHEN 2 THEN 'Second Consultant'
        ELSE 'Everyone else'
       END
    FROM consultant
    ORDER BY first_name
    /
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      相关资源
      最近更新 更多