2016-02-29 125 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