【问题标题】:Missing keyword from SELECT CASESELECT CASE 中缺少关键字
【发布时间】:2013-02-28 13:47:11
【问题描述】:

我不确定这一系列 case 语句有什么问题。 我在网上查看过,语法似乎是正确的,但我收到了错误缺少关键字。 任何帮助将不胜感激!

CASE 
when A = '1' then
         when sequence_number = 5 then 9
         when sequence_number = 6 then 9
         end
 when A = '2' then
       when sequence_number = 5 then 9
       when sequence_number = 6 then 9
       end
  when A = '3' then
        when sequence_number =7 then 9
        when sequence_number =8 then 9
        end
else T.number
end as number 

【问题讨论】:

  • 您需要在从属案例子句中添加一个额外的“案例”吗?即,当 A = '1' 时的情况,然后 case 当 sequence_number ... 等时
  • 使用保留字 (number) 对列进行别名可能不是一个好主意。

标签: sql oracle select oracle10g case


【解决方案1】:

最简单的选择似乎是:

 case 
   when (A in (1,2) and sequence_number in (5,6)) or
        (A in (3  ) and sequence_number in (7,8))
   then 9
   else t.number
 end

【讨论】:

    【解决方案2】:

    @mikeb 是正确的 - 你需要一个额外的 CASE。

    我在测试时也遇到了Number 列的问题;只是猜测,但也许甲骨文将其作为保留字窒息?如果您像我一样遇到ORA-01747: invalid user.table.column, table.column, or column specification 异常,请将其更改为NumTheNumber

    这是更新后的案例:

    CASE
    when A = '1' then
           case
           when sequence_number = 5 then 9
           when sequence_number = 6 then 9
           end
    when A = '2' then
           case
           when sequence_number = 5 then 9
           when sequence_number = 6 then 9
           end
    when A = '3' then
           case
           when sequence_number =7 then 9
           when sequence_number =8 then 9
           end
    else T.number
    end as number
    

    【讨论】:

      【解决方案3】:

      您需要在每个分支中添加第二条 CASE 语句,或者您需要组合条件

      CASE 
      when A = '1' and sequence_number = 5 then 9
      when A = '1' and sequence_number = 6 then 9
      when A = '2' and sequence_number = 5 then 9
      ...
      else T.number
      end as number 
      

      CASE 
      when A = '1' then
               case when sequence_number = 5 then 9
                    when sequence_number = 6 then 9
               end
      when A = '2' then
             case when sequence_number = 5 then 9
                  when sequence_number = 6 then 9
             end
      when A = '3' then
              case when sequence_number =7 then 9
                   when sequence_number =8 then 9
              end
      else T.number
      end as number 
      

      【讨论】:

        猜你喜欢
        • 2020-02-08
        • 2018-07-23
        • 2018-09-17
        • 1970-01-01
        • 2020-08-14
        • 2018-05-13
        • 2017-10-03
        • 1970-01-01
        • 2018-01-12
        相关资源
        最近更新 更多