2017-10-18 93 views
-2

我收到的時候我執行以下查詢的問題的標題所示的錯誤:缺少關鍵字ORA -00905

select mantas_stg.NY_EGIFTS_TRANS_STG.*, 
CASE WHEN MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_CURR != 'USD' THEN 
CASE WHEN MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_CURR != 'USD' AND MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_LOCAL_CURR != 'USD' THEN 
MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT = MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT * 100 
END 
END 
from mantas_stg.NY_EGIFTS_TRANS_STG; 

誰能告訴我,爲什麼上面的查詢在

MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT = MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT * 100 
+0

左對齊SQL非常難以閱讀。 – jarlh

+0

你不能像這樣在選擇列表中分配任務。 – jarlh

回答

0

失敗在嵌套case下面的行可能是問題:

THEN MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT = MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT * 100

你試圖在這是不允許的

如果你的目標是更新特定記錄的該列中的值,你應該使用一個update語句select聲明的值賦給MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT

+0

選擇mantas_stg.NY_EGIFTS_TRANS_STG。*, CASE WHEN MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_CURR!= '美元',那麼 CASE WHEN MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_ORIG_CURR!= '美元' AND MANTAS_STG.NY_EGIFTS_TRANS_STG.FUNDS_LOCAL_CURR!= '美元',那麼 MANTAS_STG。 NY_EGIFTS_TRANS_STG.FUNDS_ORIG_AMT ='hello' END END from mantas_stg.NY_EGIFTS_TRANS_STG; 這工作正常,而我試圖測試它 – Keerthi

+0

真的嗎?可能是你的查詢從來沒有做到這種情況下,所以它沒有炸燬。該查詢的結果集是什麼樣的?我很難相信這一點。 – tommyO

0

一個不會在case表達式中分配值。我想你想要的東西是這樣的:

select s.*, 
     (CASE WHEN s.FUNDS_ORIG_CURR <> 'USD' AND s.FUNDS_LOCAL_CURR <> 'USD' 
      THEN s.FUNDS_ORIG_AMT * 100 
      ELSE s.FUNDS_ORIG_AMT 
     END) as new_funds_orig_amt 
from mantas_stg.NY_EGIFTS_TRANS_STG s; 

確定縮進和表別名確保查詢更容易閱讀。