Search code examples
sqlsql-serveradventureworks

SQL Server - SELECT statement not returning results


Using the AdventureWorks database, I have been given a question to "List the orders customer name, order status, date ordered, count of items on the order, and average quantity ordered where the count of items on the order is greater than 300". However, my below SELECT statement does not return any results... What am I doing wrong?

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;

Solution

    • You dont need to Group By on ProductID and Orderqty. If you do a groupping on them, you will be grouping it to a single order item level. So you will never be able to count more than 300
    • Count of items on order should really be sum of the Orderqty.

    Try:

    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;