Выберите отдельный идентификатор при использовании суммы в другом столбце? - PullRequest
2 голосов
/ 08 мая 2009

Заказ может состоять из нескольких строк, поэтому OrderId не является уникальным. Как я могу сделать СУММУ и не иметь GROUP BY для правильного разбора SQL?

SELECT DISTINCT OrderId, SUM(ProductPrice * ProductQuantity ) as Total
FROM OrderDetails
GROUP BY OrderId

Если я снимаю строку GROUP BY, тогда я получаю

'OrderDetails.OrderId' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

EDIT

Мой желаемый результат - если заказ состоит из 2 продуктов, то он должен вывести обе строки.

Группа по выводит 1 строку.

Ответы [ 3 ]

2 голосов
/ 08 мая 2009

Вы не нуждаетесь в отличном.
Вы должны иметь группу при суммировании / подсчете с дополнительными столбцами
Вы получите итоги за заказ с группой по.

так
1-20.00
1-30.00
2-10.00

Получит
1-50.00
2-10.00

0 голосов
/ 08 мая 2009

Если вы выберете неагрегированный столбец (в данном случае OrderID) и агрегированный столбец (SUM(xxx)), вам придется сгруппировать по неагрегированным столбцам ...

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

0 голосов
/ 08 мая 2009

У вас нет таблицы заказов?

Обычно заказы содержат порядок и детали (строки заказа), поэтому вместо этого следует выполнить соединение с мастер-таблицей. Это должно работать.

SELECT O.OrderID,  SUM(Od.ProductPrice * OD.ProductQuantity ) as Total
FROM Orders AS O INNER JOIN OrderDetails AS OD ON O.orderID = OD.OrderID
group by O.OrderID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...