1

我试图根据他们的总销售额找到前 5 名销售人员。我想显示代表的姓名和他们的总销售额,我在 AdventureWorks 工作。

一直让我失望的是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
4

1 回答 1

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

?

于 2013-03-18T22:43:47.763 回答