2015-06-04 124 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我真的不知道如何解开那部分。