Проблема с делом и функцией извлечения - PullRequest
0 голосов
/ 30 апреля 2018

Я пишу запрос 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 - "пропущенное ключевое слово

оператор, в котором я получаю ошибку: Извлечь (ГОД ОТ PAY_EVT_BGN_DT "здесь")

Может ли кто-нибудь помочь мне с выше?

Спасибо

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Мы должны различать два основных условия <,> 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;
0 голосов
/ 30 апреля 2018

Запрос или комментарий, который вы разместили, сильно помогают; что значит "не назначать"?

В любом случае: вы не можете использовать условное предложение 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

Если это не поможет, измените вопрос, предоставьте контрольный пример, чтобы мы увидели вход и описали, как будет выглядеть выход (на основе что вход).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...