Как исправить пропущенное ключевое слово ORA-00905 с помощью выражения case - PullRequest
1 голос
/ 06 мая 2019

У меня проблема с case в строке, которую я пометил ниже.

Мне нужно, чтобы она отображалась как

debits | credits | total debits | total credits

Запрос SQL:

SELECT cv_amount,
       case when cv_amount > 0 then cv_amount else 0 end as debits, 
       case when cv_amount < 0 then cv_amount*-1 else 0 end as credits,
       sum(case when cv_amount > 0 then cv_amount else 0)--- ERROR SHOWEN HERE--- end as d, 
       sum(case when cv_amount < 0 then cv_amount*-1 else 0) end as c
FROM dof
where currency_code = 368 
  AND to_DATE('05/05/19', 'DD/MM/YY') and to_DATE('05/05/19', 'DD/MM/YY')
group by cv_amount

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Вам не нужно case для этого:

select cv_amount,
       greatest(cv_amount, 0) as debits,
       abs(least(cv_amount, 0)) as credits,
       sum(greatest(cv_amount, 0)) as d,
       sum(abs(least(cv_amount, 0))) as c
from dof
where currency_code = 368 and
      <something goes here> = date '2019-05-05'
group by cv_amount;

Большая проблема в том, что предложение where не имеет смысла. И агрегирование по cv_amount на самом деле не имеет смысла.

0 голосов
/ 06 мая 2019

В следующих двух строках есть синтаксическая ошибка

sum(case when cv_amount > 0 then cv_amount else 0) end as d, 
sum(case when cv_amount < 0 then cv_amount*-1 else 0) end as c

в скобках должно быть end, поэтому запрос будет:

sum(case when cv_amount > 0 then cv_amount else 0 end) as d, 
sum(case when cv_amount < 0 then cv_amount*-1 else 0 end) as c
...