2013-03-18 109 views
1

我試圖根據銷售總額找到前5名銷售人員。我想顯示代表的名字,以及他們的總銷售額,並且我在AdventureWorks工作。前5名銷售人員總銷售額

不斷拋棄我的是GROUP BY聲明。在下面的查詢中,我不確定爲什麼GROUP BY無法正常工作。我確信有一個更有效的方法來做到這一點,但在這一點上,我只是試圖真正學習連接和子查詢,並且GROUP BY工作的方式似乎是我沒有抓住的。

SELECT SalesLT.Customer.SalesPerson, SUM(repjoin.TotalDue) OVER (PARTITION BY repjoin.salesperson) 
FROM SalesLT.customer INNER JOIN 
    (SELECT SalesLT.SalesOrderHeader.CustomerID, 
      SalesLT.SalesOrderHeader.TotalDue, 
      SalesLT.Customer.SalesPerson 
    FROM SalesLT.Customer 
     INNER JOIN SalesLT.SalesOrderHeader 
     ON SalesLT.SalesOrderHeader.CustomerID = SalesLT.Customer.CustomerID 
    ) repjoin 
     ON SalesLT.Customer.CustomerID = repjoin.CustomerID 
GROUP BY SalesLT.Customer.SalesPerson 
+0

實際問題是什麼?這有幫助嗎? http://stackoverflow.com/questions/2404565/sql-server-difference-between-partition-by-and-group-by – RandomUs1r 2013-03-18 22:28:27

+0

歡迎來到堆棧溢出!如果可能,發佈問題時,請記住顯示您的預期結果以及您收到的結果。 – 2013-03-18 23:55:06

回答

0

爲什麼不乾脆

SELECT TOP 5 
    c.SalesPerson, 
    SUM(soh.TotalDue) TotalSales 
FROM 
    SalesLT.Customer c 
    INNER JOIN SalesLT.SalesOrderHeader soh ON soh.CustomerID = c.CustomerID 
GROUP BY 
    c.SalesPerson 
ORDER BY 
    SUM(soh.TotalDue) DESC 

+0

這應該是你想要的答案。爲了解釋,「GROUP BY」只是基於指定的值摺疊結果。通過'c.SalesPerson'進行分組可以使每個銷售人員將結果摺疊爲一行,從而可以使用集合函數(如SUM(),AVG(),MIN(),MAX()等)在結果中的非分組列上。請注意,只有您分組的列才能被引用,而無需彙總功能。 – 2013-03-18 23:58:25