SQL Server - оператор SELECT не возвращает результаты - PullRequest
0 голосов
/ 15 октября 2018

Используя базу данных AdventureWorks, мне был задан вопрос " Перечислите имя клиента в заказе, статус заказа, дату заказа, количество товаров в заказе и среднее количество заказов, где находится количество товаров в заказе.больше 300".Однако мой оператор SELECT ниже не возвращает никаких результатов ... Что я делаю не так?

SELECT scpii.LastName + ', ' + scpii.FirstName AS 'Customer Name', ssoh.Status AS 'Order Status', ssoh.OrderDate AS 'Date Ordered', SUM (ssod.OrderQty) AS 'Count of Items', AVG (ssod.OrderQty) AS 'Average Quantity'
FROM Sales.CustomerPII scpii
INNER JOIN Sales.SalesOrderHeader ssoh
ON ssoh.CustomerID = scpii.CustomerID
INNER JOIN Sales.SalesOrderDetail ssod
ON ssod.SalesOrderID = ssoh.SalesOrderID
GROUP BY scpii.LastName, scpii.FirstName, ssoh.Status, ssoh.OrderDate, ssod.OrderQty
HAVING SUM(ssod.OrderQty) > 300;

1 Ответ

0 голосов
/ 15 октября 2018
  • Вам не нужно группировать по ProductID и Orderqty.Если вы сделаете группирование по ним, вы сгруппируете его по одному уровню заказа.Таким образом, вы никогда не сможете сосчитать больше, чем 300
  • Количество предметов в заказе должно действительно быть суммой Orderqty.

Попробуйте:

SELECT scpii.LastName + ', ' + scpii.FirstName AS 'Customer Name', 
       ssoh.Status AS 'Order Status', 
       ssoh.OrderDate AS 'Date Ordered', 
       SUM (ssod.OrderQty) AS 'Count of Items', 
       AVG (ssod.OrderQty) AS 'Average Quantity'
FROM Sales.CustomerPII scpii
INNER JOIN Sales.SalesOrderHeader ssoh
  ON ssoh.CustomerID = scpii.CustomerID
INNER JOIN Sales.SalesOrderDetail ssod
  ON ssod.SalesOrderID = ssoh.SalesOrderID
GROUP BY scpii.LastName, 
         scpii.FirstName, 
         ssoh.Status, 
         ssoh.OrderDate 
HAVING SUM (ssod.OrderQty) > 300;
...