SQL连接条件子句
我的数据库如图所示(见下图) 我的任务是显示每个员工处理的订单的总价值。 我有一个SQL语句:SQL连接条件子句,sql,sql-server,Sql,Sql Server,我的数据库如图所示(见下图) 我的任务是显示每个员工处理的订单的总价值。 我有一个SQL语句: SELECT e.FirstName, e.LastName, SUM(od.Quantity * od.UnitPrice * (1-od.Discount)) FROM Orders AS o JOIN Employees AS e ON o.EmployeeID = e.EmployeeID JOIN [Order Details] AS od ON o.Orde
SELECT e.FirstName,
e.LastName,
SUM(od.Quantity * od.UnitPrice * (1-od.Discount))
FROM Orders AS o
JOIN Employees AS e
ON o.EmployeeID = e.EmployeeID
JOIN [Order Details] AS od
ON o.OrderID = od.OrderID
GROUP BY e.FirstName,e.LastName
我对进一步的步骤有意见。我只需要为以下员工提供有限的结果:
- A) 有员工在他们下面
- B) 他们手下没有任何员工
Where Exists(Select 1 from Employees where ReportsTo = e.EmployeeId)
使用自联接尝试查找向其报告的人
SELECT e.FirstName,
e.LastName,
SUM(od.Quantity * od.UnitPrice * (1-od.Discount))
FROM Orders AS o
INNER JOIN Employees AS e
ON o.EmployeeID = e.EmployeeID
LEFT JOIN Employees as under -- self join
ON e.EmployeeID = under.ReportTo
INNER JOIN [Order Details] AS od
ON o.OrderID = od.OrderID
GROUP BY e.FirstName,e.LastName
HAVING MAX(under.ReportTo) IS NULL -- If doesnt find a match mean no one subordinate
-- MAX(under.ReportTo) IS NOT NULL -- mean have at least one subordinate
通过自联接,您可能会创建重复项,由于
分组方式
,因此很难调试存在
,在WHERE
子句中有一个相关的子查询,我将如何实现这一点
SELECT *
FROM Employees e
WHERE EXISTS(
SELECT 1
FROM Employees _e
WHERE _e.ReportsTo = e.EmployeeID)
在您的查询中:
SELECT e.FirstName,
e.LastName,
SUM(od.Quantity * od.UnitPrice * (1-od.Discount))
FROM Orders AS o
JOIN Employees AS e
ON o.EmployeeID = e.EmployeeID
JOIN [Order Details] AS od
ON o.OrderID = od.OrderID
WHERE /*NOT*/ EXISTS(
SELECT 1
FROM Employees _e
WHERE _e.ReportsTo = e.EmployeeID)
GROUP BY e.FirstName,e.LastName
你的关键字是A中的第一个单词和b中的第二个单词。其SQL关键字HAVING:)感谢您的重播,但不幸的是,该语句仅适用于for:MAX(在.ReportTo下)不为NULL,MAX(在.ReportTo下)为NULL不返回任何结果@下面的Dobbins语句工作正常,解决了存在的问题。我交换
左侧
和内部
连接,请再次检查。如果只有一级报告,则此操作有效。如果您有多层人员(Sam向Janet报告,Janet向Amit报告,Amit向Trevor报告),此查询仅在您查询Trevor的报告时获取Amit的订单。但这就是他所需要的。他不需要知道是否有多个层次。他只需要知道这个人是否有人向他们报告。如果你需要重现级别,你可以使用CTE和Union ALL