案例和提取函数问题

时间:2018-04-30 11:37:55

标签: oracle

我正在编写SELECT查询,如下所示

SELECT COUNT(*) AS Number_of_rows
  FROM PAY_DETL
   WHERE 
    CASE 
    WHEN 
       Extract(MONTH FROM CURRENT_DATE) > 9
    THEN 
    Extract(YEAR FROM PAY_EVT_BGN_DT) = Extract(YEAR FROM CURRENT_DATE) AND Extract(MONTH FROM CURRENT_DATE) > 9;

我在哪里得到以下错误

  

ORA-00905:缺少关键字   00905. 00000 - “缺少关键字

我收到错误的声明是Extract(YEAR FROM PAY_EVT_BGN_DT“here”)

有人可以帮助我吗?

谢谢

2 个答案:

答案 0 :(得分:0)

您发布的查询或评论有多大帮助;什么"不分配"意思?

无论如何:你不能这样使用条件WHERE子句。一个简单的选择是将查询分成两部分,UNION将它们分成两部分,区分" WHERE子句的部分对面。

例如:

select count(*) as number_of_rows
from pay_detl
where extract(year from pay_evt_bgn_dt) = extract(year from current_date) 
  and extract(month from current_date) > 9      --> this condition ...
union
select count(*) as number_of_rows
from pay_detl
where condition_different_from_the_one_above
  and extract(month from current_date) <= 9     --> ... is just the opposite from this one

如果它没有帮助,请修改问题,提供测试用例,以便我们看到输入并描述输出 >看起来像(基于那个输入)。

答案 1 :(得分:0)

我们必须区分两个主要条件<,> 9。然后,要考虑每个案例:

SELECT  SUM(CASE WHEN Extract(MONTH FROM SYSDATE)  > 9 THEN 
                      DECODE(Extract(YEAR FROM PAY_EVT_BGN_DT), Extract(YEAR FROM CURRENT_DATE), 1, 0) 
            END COUNT_MORE_NINE),
        SUM(CASE WHEN Extract(MONTH FROM SYSDATE) <= 9 THEN 
                      1 
            END COUNT_ANOTHER)
  FROM  PAY_DETL;