【问题标题】:Is it possible to use CASE with ANY() in Oracle SQL?是否可以在 Oracle SQL 中将 CASE 与 ANY() 一起使用?
【发布时间】:2013-08-30 00:30:58
【问题描述】:

是否可以在下面的 SQL 查询中实现我想要做的事情? 我想检查项目名称是否与给定列表中的任何一个匹配。

select
  case item_name
    when any ('PEN', 'PENCIL', 'PAPER', 'ERASER') then 'STATIONARY'
    else 'OTHER'
  end is_stationary
from items;

我试过这个查询,似乎不可能。错误信息是,

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

是否有其他解决方法可以实现这一点?

【问题讨论】:

    标签: sql oracle case conditional-statements


    【解决方案1】:

    试试这个

    select
      case when item_name IN ('PEN', 'PENCIL', 'PAPER', 'ERASER') then 'STATIONARY'
        else 'OTHER'
      end is_stationary
    from items;
    

    CASE .. IN .. REFERENCE LINK

    【讨论】:

    • 它不起作用。这次缺少关键字错误。 (ORA-00905: missing keyword)
    • 这应该可以。一定有其他原因导致此错误。
    • 对不起,我的错误。我错过了then 'STATIONARY' 部分。它工作得很好。谢谢!
    • 为了记录,在这种情况下拼写为“文具”:)
    【解决方案2】:

    @bvr 的回答是迄今为止解决此问题的最常用方法。但看起来你非常接近正确地使用另一种语法, group comparison condition.

    select
      case
        when item_name = any ('PEN', 'PENCIL', 'PAPER', 'ERASER') then 'STATIONARY'
        else 'OTHER'
      end is_stationary
    from items;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 2011-02-20
      • 2023-04-03
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      • 2012-04-25
      相关资源
      最近更新 更多