SQL Server选择重复的行

时间:2014-08-05 10:55:32

标签: sql sql-server

我是SQL Server的新手,我想选择所有更改过他们部门的人一次。

表结构是:

  • BusinessEntityID
  • DepartmentID
  • ShiftID
  • StartDate
  • RateChangeDate
  • 评分
  • NationalIDNumber

我有以下代码来生成中间表

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”应该删除,因为他没有改变部门。

感谢。

2 个答案:

答案 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

如果您想删除员工曾经进入的部门的记录,但不再需要知道哪个部门知道要删除哪个记录!如果您确实知道这一点,那么请说出来,我们可以解决这个问题。