2016-11-04 85 views
0

我想選擇一個現有的列,並使用代碼縮進來創建另一個列,但是我得到了替代ORA-00923:FROM關鍵字找不到預期的地方'錯誤或'缺少關鍵字'錯誤。 (我是初學者)sql oracle case'from keyword not found where expected'

你能幫我嗎?

編輯:id是一個整數,描述是一個字符串 我想爲每個id創建一個列,當描述值匹配「VALUE1」或「VALUE2」時,它將用作標誌。在表1中,只有從值的標識符到字符串的映射,在表2中我擁有所有記錄。前

select t2.id, 
     (case when exists (select 1 
          from table_1 t1 
          where t1.description in ('VALUE1', 'VALUE2') and 
           t2.id = t1.id 
         ) 
      then 1 else 0 
     end) as DesiredColumnName, 
from db.table_2 t2; 
+0

請編輯您的問題,並提供樣本數據和預期的結果。你的代碼有多個錯誤,不管怎樣試圖修復它。導致這個錯誤的具體問題是'from'之前的逗號,但刪除它實際上不會修復查詢。 –

+0

你需要做什麼? – Aleksej

+1

Oracle沒有'BOOLEAN'數據類型。所以,除了所有的語法問題之外,在你解決它們之後,你將會遇到這個問題,而且你將無法輕易修復它。你需要決定'DesiredColumnName'(你真的確定這是你存儲在那裏的好列名嗎?)所以 - 你需要決定你是否希望該列是'NUMBER(1)'數據類型,允許(通過檢查約束)只保存值'0'和'1',或者只用'T'和''F''作爲'CHAR(1)',或者可能是'' Y''和'N''。 – mathguy

回答

0

我認爲這是你在找什麼

select t2.id, decode(t1.description, 'VALUE1', 1, 'VALUE2', 1 ,0) as DesiredColumnName 
from db.table2 t2 inner join db.table1 t1 on (t2.id = t1.id) 
+0

我也會投票的第二個腳本。最合理的。 –

+0

完美!我不知道解碼,非常感謝 –

+0

好,所以我編輯答案只留下有用的代碼。 – Kacper

0

如果我猜測你真正想做的事從。

選擇ID爲ID,

'cast(select description from db.table_1 
join db.table_2 on table_2.id = table_1.id 
case when (table_1.description in ('VALUE1', 'VALUE2')) then '1' 
else '0' 
end 
) as boolean' as DesiredColumnName 

從db.table_2

0

刪除逗號「」:

select id as ID, 

    'cast(select description from db.table_1 
    join db.table_2 on table_2.id = table_1.id 
    case when (table_1.description in ('VALUE1', 'VALUE2')) then '1' 
    else '0' 
    end 
    ) as boolean' as DesiredColumnName, 

from db.table_2 
相關問題