我是SQL Server的新手,我想选择所有更改过他们部门的人一次。
表结构是:
我有以下代码来生成中间表
select distinct
DepartmentID, NationalIDNumber
from
Table
where
NationalIDNumber in (select NationalIDNumber
from Ben_VEmployee
group by NationalIDNumber
having count(NationalIDNumber) > 1)
输出:
DepartmentID NationalIDNumber
-----------------------------
1 112457891
2 112457891
4 24756624
4 895209680
5 24756624
5 895209680
7 259388196
我的问题是:如何删除中间表中的非重复记录?
所以记录“7 - 259388196”应该删除,因为他没有改变部门。
感谢。
答案 0 :(得分:1)
尝试使用group by
并比较最高和最低部门。如果它改变了,那么这些将是不同的:
select NationalIDNumber
from Ben_VEmployee
group by NationalIDNumber
having min(DepartmentID) <> max(DepartmentID);
如果您需要实际的部门,可以将其重新加入原始数据。
答案 1 :(得分:1)
如果您想要一个包含多个部门的每个ID号的列表,您可以使用
SELECT COUNT(DepartmentID) AS noDepartments
, NationalIDNumber
FROM Table
GROUP BY NationalIDNumber
HAVING COUNT(DepartmentID) > 1
如果您想删除员工曾经进入的部门的记录,但不再需要知道哪个部门知道要删除哪个记录!如果您确实知道这一点,那么请说出来,我们可以解决这个问题。