2013-10-26 40 views
3

我想弄清楚显示号码(数量)的员工谁在超过1个部门工作的查询。这里的表名和字段:获取在SQL查询中工作在多个部门的员工数量

  • Employee(id_employee,employee_name,薪水)
  • Department(id_dept,DEPT_NAME,预算)
  • Department_Employee(id_employee,id_dept,workhours_percentage)

假设Department_Employee表的内容为

id_employee id_dept workhours_percentage 
----------- ------- -------------------- 
0001   03   100 
0001   04   50 
0001   05   60 
0002   05   60 
0002   09   90 
0003   08   80 
0004   07   80 
0005   06   60 
0006   05   70 
0007   04   75 
0008   10   95 
0009   02   25 
0010   01   40 

有了一个正确的查询,结果应该是2(员工),因为有2名员工谁在多个部门

  • 员工工作在3个部门
  • 员工0001工作在2个部门
  • 技术工作


我试着用下面的查询

SELECT COUNT(DISTINCT id_employee) 
FROM Department_Employee 
GROUP BY id_employee 
HAVING COUNT(id_employee)>1 

但结果并不钻机H T。

请帮我一把。

谢谢。

+0

当您通过id_imployee分组时,您认为COUNT(DISTINCT id_employee)可能是什么? –

回答

1
SELECT COUNT(*) 
FROM 
(
SELECT id_employee, COUNT(*) AS CNT 
FROM Department_Employee 
GROUP BY id_employee 
) AS T 
WHERE CNT > 1 
+0

谢谢,它的工作原理!但是,如果我要求解释,你介意吗? :D –

+0

Department_Employee链接员工与部门之间的关系。 “Count(*)”将根据employee_id计算行数组。 “CNT”将在子查询中实现,并可用作外部查询中“where”子句中的过滤器。 – yswai1986

3

要得到所有员工的工作在多个部门:

SELECT id_employee, COUNT(*) 
FROM Department_Employee 
GROUP BY id_employee 
HAVING COUNT(*)>1 

算来:

; 
WITH cte As 
(
    SELECT id_employee 
    FROM Department_Employee 
    GROUP BY id_employee 
    HAVING COUNT(*)>1 
) 
SELECT COUNT(*) FROM cte 
+0

我得到这样的错误“没有列名称被指定为'cte'的第2列。” –

+1

@KleinrockHyper对不起,现在修复。 – RBarryYoung

+0

谢谢,现在它工作。 我还有一个问题,如何将该代码放入函数中? –

0
select e.id_employee, count(e.id_dep) from Department_Employee e group by e.id_employee having count(e.id_dep)>1 ; 

在此我想先设法得到由id_employee 计算部门ID组,并且我们的要求是查找属于多个部门的员工使用count(e.id_dep)> 1来检索相同。

+1

单行解决方案应在评论中。 – Rumit

+0

这不提供问题的答案。一旦你有足够的[声誉](https://stackoverflow.com/help/whats-reputation),你将可以[对任何帖子发表评论](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提问者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [来自评论](/ review/low-quality-posts/18886240) –

+2

感谢您使用此代码段,这可能会提供一些有限的短期帮助。通过展示*为什么*这是一个很好的解决方案,并且使它对未来的读者更有用,一个正确的解释[将大大提高](// meta.stackexchange.com/q/114762)其长期价值其他类似的问题。请[编辑]你的答案以添加一些解释,包括你所做的假设。 –

相关问题