Ниже приведен пример запроса:
select acct_no, month, sum(amount), substr(charge_type, 1, 3),
case when (charge_type in ('CRE1', 'CRE2')
then 'electronic payment'
else 'cash'
end as 'payment_type'
from billing_data
where charge_type in ('CRE1', 'CRE2', 'CASH')
group by acct_no, month, sum(amount),
substr(charge_type, 1, 3)
having sum(amount) != 0
order by acct_no asc;
Чего я пытаюсь добиться, так это вернуть сумму сумм типов начислений CRE1 и CRE2, сгруппированных вместе для каждого номера счета, где эта сумма не равна 0.
Без substr в группе by запрос выполняется и возвращает ожидаемые результаты, за исключением типов начислений CRE1 и CRE2, которые не суммируются вместе в одной строке.
Когда я добавляю substr в группу, я получаю следующее сообщение об ошибке:
[Error] Execution (63: 15): ORA-00979: not a GROUP BY expression
Есть ли способ добиться этого в Oracle?
Изменить: для всех, кто может увидеть это сообщение. Решение выглядит следующим образом:
select acct_no, month, sum(amount) as sumofamount,
substr(charge_type, 1, 3) as charge_type_substring,
(
case when (charge_type in ('CRE1', 'CRE2')
then 'electronic payment'
else 'cash'
end) as payment_type
from billing_data
where charge_type in ('CRE1', 'CRE2', 'CASH')
group by acct_no, month, substr(charge_type, 1, 3),
(
case when (charge_type in ('CRE1', 'CRE2')
then 'electronic payment'
else 'cash'
end)
having sum(amount) != 0
order by acct_no asc;
sum(amount)
. Вы хотите суммировать сумму или сгруппировать по ней? Кроме того, вы не группируете по полюpayment_type
и не агрегируете его по формуле. Он должен войти в вашу группу GROUP BY. - person JNevill   schedule 21.02.2018case when (charge_type in ('CRE1', 'CRE2') then 'electronic payment' else 'cash'
в предложение group by. (Или сгруппируйте поcharge_type
, но я не думаю, что это то, что вам нужно. - person Shannon Severance   schedule 21.02.2018