2012-05-20 141 views
1

我正在嘗試確定客戶使用SQL所花費的總金額。我有兩張表,Customers和Orders。訂單對每個訂單都有一個「Total_Payment_Received」。我想要的是爲Customers表上的給定CustomerID輸出的所有「Total_Payment_Received」的總和。我不需要看到所有的單個訂單,僅僅是他們與我們完成的業務總量。加入表的SUM函數

感謝您的任何建議!

例子:

SELECT Customers.CustomerID, Customers.Company_Name 
     ,SUM(Orders.Total_Payment_Received) 
    FROM Customers 
    JOIN Orders ON Customers.CustomerID = Order.CustomerID 
    WHERE Customers.LastModified BETWEEN '01/01/11 00:00:01' AND '05/15/11 11:59:59'; 
+5

你只需要添加一個 「GROUP BY Customers.CustomerID,Customers.Company_Name」。如果你想包括沒有訂單的客戶,你需要做一個外部連接。 – Glenn

回答

0

一種可能的方式是: 您需要使用子查詢與此類似。

SELECT 
    CustomerID, 
    (SELECT SUM(Total_Payment_Received) Total FROM Orders WHERE Orders.CustomerId=Customers.CustomerId) Total 
FROM Customers 
1
  • 您可以通過客戶需要的組。我想,一個客戶通過(主鍵)CustomerID標識,因此使用:GROUP BY Customers.CustomerID

  • 對於日期最好是使用標化ISO格式'20110515''2011-05-15'格式,因此不存在歧義。當您使用類似'01/05/11'的東西時,並非全部清楚它是否爲01-May-2011Jan-05-20112001-May-11或甚至1901-May-11。我想你正在使用Month/Day/Year格式,但我可能是錯的。

  • 它也更容易使用<=<而不是BETWEEN日期範圍檢查:

    SELECT Customers.CustomerID 
        , Customers.Company_Name 
        , SUM(Orders.Total_Payment_Received) AS Total_Amount_of_Business 
    FROM Customers 
        JOIN Orders 
         ON Customers.CustomerID = Order.CustomerID 
    WHERE Customers.LastModified >= '2011-01-01' 
        AND Customers.LastModified < '2011-05-16' 
    GROUP BY Customers.CustomerID ;