【发布时间】:2019-07-25 18:55:43
【问题描述】:
我有一个 EmployeeList 表,其中包含来自 Company 表和 Employee 表的数据。一个员工可以同时在多个公司中处于活动状态,因此我需要一个查询,根据某些场景仅从其中一个公司中选择员工的记录,我将在下面介绍。
John Doe 在主要公司和次要公司都很活跃。我只需要报告他在初级公司的记录,而忽略他在二级公司的记录。
John Doe 仅在二级公司活跃,因此需要报告他在该公司的记录。
John Doe 昨天在主要公司和次要公司都很活跃。今天,他被第一公司解雇了,所以他在第二公司的记录需要报告。
我已尝试排除公司为“次要公司”且员工在 EmployeeList 中被报告两次的任何记录,换句话说,他们同时在两家公司中都处于活动状态,但这不符合规定的参数按场景 #3。
DELETE FROM EmployeeList
WHERE CompanyName = 'Secondary Company'
AND EmployeeID IN (SELECT EmployeeID
FROM EmployeeList
GROUP BY EmployeeID
HAVING COUNT(1) > 1
);
根据我包含的 3 个场景中规定的参数,每个员工只应报告一条记录。
【问题讨论】:
-
我很困惑。您是在尝试修改数据还是只是根据您的规则执行
SELECT? -
如果记录处于非活动状态,您真的要删除记录,还是希望视图显示每个员工中的一个以及他们在表中处于活动状态的条件?还有表中的字段是什么,需要返回所有字段吗?
-
您如何知道哪家公司是给定员工的主要公司?当然,您的数据并没有真正使用“主要公司”作为公司名称来识别它!
标签: sql sql-server