2013-05-03 15 views
0

У меня есть таблица под названием 'order_details'"Группировка" не работает должным образом

enter image description here

И таблица называется PRODUCT_DETAIL enter image description here

Я хочу, чтобы получить данные, как

enter image description here

Order_total будет сумма (количество * цена) -> (2 * 10) + (2 * 100) + (4 * 20) = 300

Я использовал следующий запрос

Select Order_id, (ROUND(SUM(ql.price * ql.quantity), 2) Order_total 
From ORDER_DETAILS o 
Inner join PRODUCT_DETAIL p 
On o.order_id=p.order_id 
Group by Order_id 

Но это даёт ошибку ORA-00979: not a GROUP BY expression

то, что я делаю неправильно здесь. Я знаю, что это будет довольно просто, но не может понять проблему.

EDIT:

Edited запрос

select o.order_id, round(sum(p.price * p.quantity),2) order_total 
from order_details o 
inner join product_detail p 
on o.order_id = p.order_id 
group by o.order_id; 
+1

Существуют а круглые скобки слишком много, и псевдонимы, используемые в списке выбора не соответствуют тем, которые используются для таблиц. И order_id должен быть квалифицирован с использованием соответствующего псевдонима таблицы (который работает в 10g из-за ошибки в синтаксическом анализаторе, но будет отклонен в 11 и далее) –

ответ

1

Даже с пересаженными именами таблиц, как @a_horse_with_no_name рекомендует, у вас есть целый ряд других проблем, хотя странно ни один из них не приведут к ОРУ -00979. Мог бы также перечислить их, хотя это не предназначено, чтобы быть суровым ...

  • вы используете таблицы псевдонимов ql но не определен;
  • Вы имеете в виду колонку unit_price, когда вы говорите, что столбец равен price;
  • у вас отсутствует закрытие ), или более разумный у вас есть дополнительные( до ROUND; (Я не уверен, что ROUND полезен - он не будет делать многого, если ваши цены не являются долями пенсов/центов/независимо);
  • у вас есть столбец под названием order_id в обеих таблицах, но вы не указали, что использовать в select или order by.

С вашими новыми именами таблиц это работает:

select o.order_id, round(sum(p.price * p.quantity),2) order_total 
from order_details o 
inner join product_detail p 
on o.order_id = p.order_id 
group by o.order_id; 

    ORDER_ID ORDER_TOTAL 
---------- ----------- 
     1   300 

Если ROUND был предназначен, чтобы сделать его показать два знака после запятой, не будет; Вы должны были бы использовать TO_CHAR вместо этого, может быть:

select o.order_id, to_char(sum(p.price * p.quantity), '999G999D99') order_total 
... 

    ORDER_ID ORDER_TOTAL 
---------- ----------- 
     1  300.00 
+0

См. Мои правки выше. Я редактировал запрос и вносил изменения. Сейчас он отлично работает –

Смежные вопросы