子查询返回的值超过1,错误消息为512

时间:2016-02-29 23:49:39

标签: sql sql-server

SQL Server 2012.

我不知道如何让我的子查询工作。它返回不超过1的值,这是不允许的。我想要每个customerID的数量总和。 customerID存在于tblOrderQuantityOrdered位于LineItem表格中。

SELECT 
    CustomerID, ProductID, 
    SUM(QuantityOrdered) AS QuantitySum,
    (SELECT (SUM(QuantityOrdered)) 
     FROM LineItem
     INNER JOIN tblOrder ON tblOrder.OrderID = LineItem.OrderID 
     GROUP BY CustomerID) as PRACTICE
FROM 
    tblOrder
INNER JOIN 
    LineItem LI ON tblOrder.OrderID = LI.OrderID
WHERE 
    OrderDate BETWEEN '2016-01-31' AND '2016-03-01'
GROUP BY 
    ProductID, CustomerID
ORDER BY 
    CustomerID

2 个答案:

答案 0 :(得分:1)

使用GROUP BY CustomerID子句替换子查询中的WHERE

SELECT      CustomerID,
            ProductID,
            sum(QuantityOrdered) as QuantitySum,
            (
                    SELECT      (sum(QuantityOrdered))
                    FROM        LineItem    AS LI_sub
                    INNER JOIN  tblOrder    AS O_sub    ON O_sub.OrderID = LI_sub.OrderID
                    WHERE       O_sub.CustomerId = tblOrder.CustomerId
            ) as PRACTICE
FROM        tblOrder
INNER JOIN  LineItem LI ON tblOrder.OrderID = LI.OrderID
WHERE       OrderDate BETWEEN '2016-01-31' AND '2016-03-01'
GROUP BY    ProductID, CustomerID
ORDER BY    CustomerID

答案 1 :(得分:0)

  

我想要每个customerID的数量总和

对于所有订单还是只有所选订单?

也许这就是你想要实现的目标?

SELECT CustomerID, 
       ProductID, 
       SUM(QuantityOrdered) as QuantitySum,
       SUM(SUM(QuantityOrdered)) OVER (PARTITION BY CustomerID) as QuantitySumByCustomerID
FROM  tblOrder
      INNER JOIN LineItem LI ON tblOrder.OrderID = LI.OrderID
WHERE OrderDate BETWEEN '2016-01-31' AND '2016-03-01'
GROUP BY ProductID, CustomerID
ORDER BY CustomerID