2016-02-29 81 views
0

SQL Server 2012.子查询返回多个值,错误消息512

我不知道如何让我的子查询工作。它返回多于1个不允许的值。我想要每个customerID的数量总和。 customerID存在于tblOrder中,QuantityOrdered存在于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 
+0

我知道第二个总和(QuantityOrdered)似乎是多余的,但我将它编辑为计算值,一旦我找出什么是错的。 – Iansberg

+0

你的子查询将按客户ID分组,每个CustomerID都会返回一笔金额。因此,主查询的每一行都有多行子查询。 – artm

+0

在您的子查询中,您按照CustomerID进行分组,因此对于每个客户,您将获得一个值 – Squirrel

回答

1

WHERE条款替换子查询的GROUP BY CustomerID

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 
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 
相关问题