Уважаемые коллеги, прошу подсказать ЧЯДНТ? Почему
ORA-00979: выражение не является выражением GROUP BY?
Запрос:
select cp.name as bank_name,
case
when p.register_date between to_date('01.01.2014 00.00.00', 'dd.mm.yyyy hh24:mi:ss')
and to_date('31.12.2014 23.59.59', 'dd.mm.yyyy hh24:mi:ss')
then count(p.guid)
end as "2014",
case
when p.register_date between to_date('01.01.2015 00.00.00', 'dd.mm.yyyy hh24:mi:ss')
and to_date('20.03.2014 23.59.59', 'dd.mm.yyyy hh24:mi:ss')
then count(p.guid)
end as "2015"
from cp_providers cp
left join payments p
on cp.guid = p.cpp_guid
where p.payment_date = '01.01.70'
and p.is_active = 1
group by cp.name;
Большое спасибо!
Ответ
Видимо, ошибка в использовании case и функции группировки count.
Как вариант, можно сделать так:
select cp.name as bank_name,
COUNT(case
when p.register_date between to_date('01.01.2014 00.00.00', 'dd.mm.yyyy hh24:mi:ss')
and to_date('31.12.2014 23.59.59', 'dd.mm.yyyy hh24:mi:ss')
then p.guid
else NULL
end) as "2014",
COUNT(case
when p.register_date between to_date('01.01.2015 00.00.00', 'dd.mm.yyyy hh24:mi:ss')
and to_date('20.03.2014 23.59.59', 'dd.mm.yyyy hh24:mi:ss')
then p.guid
else NULL
end) as "2015"
from cp_providers cp
left join payments p
on cp.guid = p.cpp_guid
where p.payment_date = '01.01.70'
and p.is_active = 1
group by cp.name;
Комментариев нет:
Отправить комментарий