2013-03-12 58 views
1

我不确定这个case语句序列有什么问题。 我已经在网上看,语法似乎是正确的,但我得到错误缺少关键字。 任何帮助将不胜感激!来自SELECT 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 
+2

你需要在相关的条款的情况下额外的 “案例”?即当A ='1'的情况下,那么* case *当sequence_number ...等 – Mikeb 2013-03-12 20:35:38

+0

用保留字('number')混淆列可能不是一个好主意。 – 2013-03-13 02:52:38

回答

2

最简单的方法似乎是:

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

你要么需要第二个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 
0

@mikeb是正确的组合 - 你需要一个额外的案件。

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

下面是更新CASE:

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