eliasum
@eliasum
cd ..

Есть ли ошибка в запросе?

Здравствуйте)

При запуске запроса
with rec(pr.pid,cid,par_cid,name,incoming,outcoming,balance) as (
  select
    pr.pid,
    null as cid,
    pr.rcid as par_cid,
    pr.pname as name,
    sum(case when incoming = '1' then rec.quantity end) incoming,
    sum(case when incoming = '0' then rec.quantity end) outcoming,
    sum(case when incoming = '1' then 1 else -1 end * rec.quantity) balance
  from
    products pr
    inner join records rec on rec.rpid=pr.pid
  group by 
    pr.pid,
    pr.rcid,
    pr.pname
  union all select
    null,
    cat.cid,
    cat.par_cid,
    cat.rname,
    incoming,
    outcoming,
    balance
  from
    rec
    inner join catalog cat on cat.cid = rec.par_cid)
select
  pid,
  cid,
  name,
  sum(incoming),
  sum(outcoming),
  sum(balance)
from
  rec
group by
  pid,
  cid,
  name;


Oracle пишет ошибку: "ORA-02000: missing ) keyword". Подскажите, что неправильно?
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 4
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Добавь скобки:
sum((case when incoming = '1' then 1 else -1 end) * rec.quantity) balance
Ответ написан
eliasum
@eliasum Автор вопроса
cd ..
Поправил, но так же ругается "ORA-02000: missing ) keyword"
Ответ написан
BojackHorseman
@BojackHorseman Куратор тега SQL
...в творческом отпуске...
group by разве не только к результату union может быть применен?
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Первое что бросается в глаза - в селекте фигурируют поля, которые не участвуют ни в агрегации ни в группировке
select
    pr.pid,
    null as cid,
    pr.rcid as par_cid,
    pr.pname as name,
    sum(case when incoming = '1' then rec.quantity end) incoming,
    sum(case when incoming = '0' then rec.quantity end) outcoming,
    sum(case when incoming = '1' then 1 else -1 end * rec.quantity) balance
  from
    products pr
    inner join records rec on rec.rpid=pr.pid
  group by 
    pr.pid,
    pr.rcid,
    pr.pname


Так что стоит начать с первого селекта в with,
потом его же с union

и потом уже дальше
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы