查找在不同加入日期雇用的员工姓名

时间:2017-01-06 22:54:22

标签: sql sql-server database

enter image description here我写了一个查询,找到在同一天雇用的员工。

这是查询

select a.name,b.name,a.joining,b.joining from [SportsStore].[dbo].[Employees] a, 
  [SportsStore].[dbo].[Employees] b where a.joining = b.joining and a.name>b.name

然后突然出现了一个问题。我如何才能找到那些在不同日期被聘用的员工?我试过这样的事情

select a.name,b.name,a.joining,b.joining from [SportsStore].[dbo].[Employees] a, 
  [SportsStore].[dbo].[Employees] b where a.joining != b.joining and a.name>b.name

然后我意识到这没有意义。我想到了一个子查询,但它也不会工作,因为我们从两个表中选择。

所以我搜索了一下,找不到任何东西。

所以问题是我们如何“查找在不同加入日期雇用的员工姓名?”

enter image description here

3 个答案:

答案 0 :(得分:1)

使用子查询加入Employees表,该子查询计算加入日期。

where j.num = 1

返回在不同日期雇用的员工

where j.num > 1

返回在同一日期雇用的员工

select e.id, e.name, e.joining
from [SportsStore].[dbo].[Employees] e
     inner join (select joining, count(*) num
                 from [SportsStore].[dbo].[Employees]
                 group by joining) j
     on j.joining = e.joining
where j.num = 1;

+----+------+---------------------+
| id | name |       joining       |
+----+------+---------------------+
|  1 |  abc | 01.01.2017 00:00:00 |
+----+------+---------------------+
|  2 |  def | 01.01.2017 00:00:00 |
+----+------+---------------------+
|  5 |  mno | 01.01.2017 00:00:00 |
+----+------+---------------------+

+----+------+---------------------+
| id | name |       joining       |
+----+------+---------------------+
|  3 |  ghi | 02.01.2017 00:00:00 |
+----+------+---------------------+
|  4 |  jkl | 03.01.2017 00:00:00 |
+----+------+---------------------+

可在此处查看:http://rextester.com/OOO96554

答案 1 :(得分:0)

如果您只需要名称(而不是不同的招聘日期列表),以下相当简单的查询应该可以完成这项工作:

select id, name
from employee
group by id, name
having count(distinct joining) > 1

答案 2 :(得分:0)

得到答案后,我有另一种方法可以获得相同的结果。这里是。我希望它对其他人有帮助,有人可能会解释哪种方法更好,在什么情况下。

select name,joining from [SportsStore].[dbo].[Employees] where joining not in
(
                 select joining
                 from [SportsStore].[dbo].[Employees]
                 group by joining
                 having count(*)=1
)