2013-03-12 28 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