创建一个查询,该查询向来自"USA"的客户显示从某个日期起过去 3 天内没有销售的员工。罗斯文数据库



我想让员工在1997-01-25之前的最后3天内没有销售给来自"美国"的客户。

订单表

OrderID CustomerName    EmployeeId  Orderdate
10248   C1               1             1997-01-25 00:00:00:000
10249   C2               3             1997-0-24 00:00:00:000
10250   C3               2             1997-01-23 00:00:00:000
10251   c4               5             1997-01-22 00:00:00:000
10251   c5               4             1997-01-23 00:00:00:000

员工

EmployeeID  Emp_name
1            E1
2            E2  and so on till e5

客户

CustomerID   Country
C1            USA
C2            UK
C3            Brazil
C4            UK 
C5            USA

所需结果

EmployeeID
2
3
5

已尝试查询

select EmployeeID
from Employees e1
where employeeid not in
(
select o.EmployeeID
from orders o
full join customers c on o.CustomerID=c.CustomerID
where c.Country = 'USA' 
and o.RequiredDate >= dateadd(day,-3, '1997-01-25')
)
  • 共有e1至e5名员工
  • e1于1997年1月25日为客户c1提供服务。c1来自美国
  • e4于1997年1月23日(1997年1日25日前3天内(为客户c4提供服务,c4来自美国
  • 因此,从员工的总列表中获取一个不在e1和e4中的员工列表

但是我得到的结果是空白的,因为没有行。有人能帮忙吗。(这只是一个样本(:来自northwind数据库的数据。我刚刚创建了样本数据,以防有人没有北风数据库

完全基于您"提供"的表数据,问题是您正在寻找一个整数的Employee id,而您的子查询返回了一个员工名称列表。因此,如果你这样修改它,你会得到正确的答案:

CREATE TABLE #Orders (OrderID int, CustomerName varchar(20), EmployeeName varchar(20), Orderdate datetime)
INSERT INTO #Orders VALUES
(10248, 'C1', 'E1', '1997-01-25 00:00:00:000'),
(10249, 'C2', 'E3', '1997-01-24 00:00:00:000'),
(10250, 'C3', 'E2', '1997-01-23 00:00:00:000'),
(10251, 'c4', 'e5', '1997-01-22 00:00:00:000'),
(10251, 'c5', 'e4', '1997-01-23 00:00:00:000')
CREATE TABLE #Employees (EmployeeID int, Emp_name varchar(10))
INSERT INTO #Employees VALUES
(1, 'E1'),
(2, 'E2'),
(3, 'E3'),
(4, 'E4'),
(5, 'E5')
CREATE TABLE #Customers (CustomerID varchar(10), Country varchar(20))
INSERT INTO #Customers VALUES
('C1', 'USA'),
('C2', 'UK'),
('C3', 'Brazil'),
('C4', 'UK' ),
('C5', 'USA')
select Emp_name
from #Employees e1
where Emp_name not in
(
select o.EmployeeName
from #orders o
inner join #customers c on o.CustomerName = c.CustomerID
where c.Country = 'USA' 
and o.Orderdate >= dateadd(day,-3, '1997-01-25')
)
SELECT DISTINCT Employees.Emp_name
FROM Employees
LEFT JOIN Orders ON Orders.EmployeeID = Employees.EmployeeID AND Orders.Orderdata BETWEEN '1997-01-23' AND '1997-01-25'
LEFT JOIN Customers ON Customers.CustomerID = Orders.CustomerID AND Customers.Country = 'USA'
AND Customers.CustomerID IS NULL

最新更新