Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > SQL запрос на получение суммы заказа


Автор: zhuchok 25.1.2011, 17:14
Помогите пожалуйста! Не могу написать запрос для получения суммы по заказу.
Необходимо получить сумму по заказанным товарам, сумму по всем состояниям истории и сумму этих двух выражений, умноженную на скидку.

Вот таким образом все работает:
Код

SELECT order_client.id_order, 
Sum(order_goods.amount*goods.cost) AS Sum_goods, 
Sum(order_history.hours*stage_order.cost_in_hour) AS Sum_History, 
Sum(order_client.disk) AS [Sum-disk], 
Sum((1-order_client.disk)*((order_goods.amount*goods.cost+order_history.hours*stage_order.cost_in_hour))) AS Sum_order
FROM goods INNER JOIN (stage_order INNER JOIN (order_history INNER JOIN (order_client INNER JOIN order_goods 
ON order_client.id_order=order_goods.id_order) 
ON order_client.id_order=order_history.id_order) 
ON stage_order.id_stage=order_history.id_stage) 
ON goods.id_goods=order_goods.id_goods
GROUP BY order_client.id_order;


Но проблемма в том, что не по каждому заказу есть история. А суммы нужны по всем! 

Пробовала так:
Код

SELECT order_client.id_order, 
Sum(order_goods.amount*goods.cost) AS Sum_goods, 
Sum(order_history.hours*stage_order.cost_in_hour) AS Sum_History, 
Sum(order_client.disk) AS [Sum-disk], 
Sum((1-order_client.disk)*((order_goods.amount*goods.cost+order_history.hours*stage_order.cost_in_hour))) AS Sum_order
FROM goods INNER JOIN (stage_order INNER JOIN (order_history RIGHT JOIN (order_client LEFT JOIN order_goods 
ON order_client.id_order=order_goods.id_order) 
ON order_client.id_order=order_history.id_order) 
ON stage_order.id_stage=order_history.id_stage) 
ON goods.id_goods=order_goods.id_goods
GROUP BY order_client.id_order;

Тогда вообще ошибка "не потдерживается выражение объединения".

Автор: Akina 25.1.2011, 17:53
Цитата(zhuchok @  25.1.2011,  18:14 Найти цитируемый пост)
Если кто подскажет как залить картинку могу разместить структуру таблицы

Модератор: Если кто-то не прочитает закреплённые темы форума ... 

Автор: zhuchok 26.1.2011, 02:48
Проблема решена следующим образом:
Код

SELECT order_client.id_order, 
Sum(Nz(order_goods.amount*goods.cost)) AS Sum_goods, 
Sum(Nz(order_history.hours*stage_order.cost_in_hour)) AS Sum_History, 
Sum(order_client.disk) AS [Sum-disk], 
Sum((1-order_client.disk)*((Nz(order_goods.amount)*Nz(goods.cost)+Nz(order_history.hours)*Nz(stage_order.cost_in_hour)))) AS Sum_order
FROM stage_order RIGHT JOIN ((order_client LEFT JOIN (goods RIGHT JOIN order_goods 
ON goods.id_goods=order_goods.id_goods) 
ON order_client.id_order=order_goods.id_order) LEFT JOIN order_history 
ON order_client.id_order=order_history.id_order) 
ON stage_order.id_stage=order_history.id_stage
GROUP BY order_client.id_order;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)