2015-06-04 66 views
0

我有這個查詢,我試圖運行,問題是我不斷收到「缺少關鍵字」notifactions。我試圖生成一個查詢,將計算系統日期對代數calcualted值,如果他們相等,那麼Where語句將根據我的情況下「THEN」部分後的值進行搜索。有人可以幫助這些嗎?Oracle SQL Where Case Error

WHERE 
    CASE 

       WHEN (SYSDATE) = (42192+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42192*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-01'' 
       WHEN (SYSDATE) = (42193+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42193*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-02'' 
       WHEN (SYSDATE) = (42194+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42194*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-03'' 
       WHEN (SYSDATE) = (42195+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42195*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-04'' 
       WHEN (SYSDATE) = (42198+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42198*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-05'' 
       WHEN (SYSDATE) = (42199+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42199*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-06'' 
       WHEN (SYSDATE) = (42200+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42200*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-07'' 
       WHEN (SYSDATE) = (42201+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42201*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-08'' 
       WHEN (SYSDATE) = (42202+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42202*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-09'' 
       WHEN (SYSDATE) = (42205+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42205*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-10'' 
       WHEN (SYSDATE) = (42206+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42206*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-11'' 
       WHEN (SYSDATE) = (42207+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42207*52)/365)/4))) THEN' THE.DESCRIPTION = 'TEST-12'' 
       WHEN (SYSDATE) = (42208+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42208*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-13'' 
       WHEN (SYSDATE) = (42209+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42209*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-14'' 
       WHEN (SYSDATE) = (42212+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42212*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-15'' 
       WHEN (SYSDATE) = (42213+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42213*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-16'' 
       WHEN (SYSDATE) = (42214+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42214*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-17'' 
       WHEN (SYSDATE) = (42215+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42215*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-18'' 
       WHEN (SYSDATE) = (42216+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42216*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-19'' 
       WHEN (SYSDATE) = (42219+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42219*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-20'' 
       WHEN (SYSDATE) = (42220+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42220*52)/365)/4))) THEN 'THE.DESCRIPTION = 'TEST-21'' 

       END 

);

回答

0

我想你應該做子查詢來選擇你正在尋找的值,然後在主查詢中執行WHERE語句。例如:

SELECT * FROM suppliers WHERE office_name = (
SELECT 
CASE 
    WHEN supplier_name = 'IBM' and supplier_type = 'Hardware' THEN 'North office' 
    WHEN supplier_name = 'IBM' and supplier_type = 'Software' THEN 'South office' 
END 
FROM suppliers; 
); 
0

您必須將總體案例表達式結果與某些內容進行比較,但不能在每個then內進行比較。你也有你的報價搞砸了,這無助於理解你在做什麼。但它看起來像你想要更多的東西一樣:

WHERE 
    THE.DESCRIPTION = CASE 
    WHEN (SYSDATE) = (42192+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42192*52)/365)/4))) THEN 'TEST-01' 
    WHEN (SYSDATE) = (42193+30*(TRUNC((((SYSDATE)*52)/365)/4) - (((42193*52)/365)/4))) THEN 'TEST-02' 
    ... 
    END 

雖然我會扭轉when計算所以你最終檢查的東西要簡單得多;自sysdate*52isn't going to work我真的不知道如何解開那部分。