好的,所以我在数据库作业中遇到了这个问题。
我需要回答这个问题:
选择员工的姓名和员工的电子邮件地址 这个月的个人销售额最高。
所以我基本上需要选择当月销售额最高的员工。
这就是我所拥有的:
SELECT
FirstName + ' ' + LastName as 'Employee Name', Email
FROM
Employee
INNER JOIN
Sale ON Employee.EmployeeNumber = Sale.EmployeeNumber
GROUP BY
Sale.SaleDate, Sale.SaleNumber, Employee.FirstName, Employee.LastName, Employee.Email
HAVING
DatePart(Month, SaleDate) = DatePart(Month, GetDate()) AND ...
我唯一遗漏的是HAVING
声明的第二部分。
我目前的查询返回了这些current query results
这些结果显示我在当月(11月)所做的所有销售,我们可以看到Tom Tucker的销售额最高。但是,我需要我的选择查询才能合法地显示他的名字。 (所以不使用WHERE(FirstName + LastName)='TomTucker')
我最初想过使用Max(Count(SaleNumber))但是我得到一个错误,说我不能在彼此之间使用聚合函数。所以我不知道如何得到我想要的结果。
谢谢!
答案 0 :(得分:1)
解决问题将其分解为部分
本月获得最大的销售:
SELECT *
FROM Sale
WHERE DatePart(Month, SaleDate) = DatePart(Month, GetDate())
ORDER BY amt DESC
FETCH FIRST 1 ROW ONLY
加入用户表。
SELECT COALESCE(E.FirstName+' '+E.LastName,E.FirstName,E.LastName,'') as Employee_Name, E.Email
FROM Employee E
JOIN (
SELECT EmployeeNumber
FROM Sale
WHERE DatePart(Month, SaleDate) = DatePart(Month, GetDate())
ORDER BY amt DESC
FETCH FIRST 1 ROW ONLY
) On S.EmployeeNumber = E.EmployeeNumber
我们可以使用相同的技术来解决许多问题,以找到销售最多的员工的详细信息,我们只需用此替换内部查询
-- select employee# with most sales this month
SELECT EmployeeNumber
FROM (
SELECT EmployeeNumber, Count(SaleNumber) as SC
FROM Sale
WHERE DatePart(Month, SaleDate) = DatePart(Month, GetDate())
) sub
ORDER BY SC DESC
FETCH FIRST 1 ROW ONLY