如何找到在特定部门工作的员工

How to find employees who and worked in specific departments

如何select 在部门 03 和 04 工作的员工。在此代码段中,只有 emp 0001 和 0004 在 03 和 04 部门工作。

id_employee  id_dept  workhours_percentage
-----------  -------  --------------------
0001           03         100
0001           04          50
0001           05          60
0002           05          60
0002           09          90
0002           08          80
0003           07          80
0003           06          60
0003           05          70
0004           03          75
0004           04          95
0004           02          25

试试这个:

SELECT id_employee 
FROM Your_Table
WHERE id_dept IN('03','04')
GROUP BY id_employee
HAVING COUNT(DISTINCT id_dept)=2

输出:

id_employee
0001
0004

您可以将 GROUP_CONCAT 函数与 GROUP BY 一起使用来实现此目的:

SELECT EMP_ID,
GROUP_CONCAT(DISTINCT DEPT ORDER BY DEPT ASC SEPARATOR '; ') DEPTS
FROM 
(
  SELECT '0001' EMP_ID, '03' DEPT, '100' WORK_PER FROM DUAL UNION ALL
  SELECT '0001' EMP_ID, '04' DEPT, '50' WORK_PER FROM DUAL UNION ALL
  SELECT '0001' EMP_ID, '05' DEPT, '60' WORK_PER FROM DUAL UNION ALL
  SELECT '0002' EMP_ID, '05' DEPT, '60' WORK_PER FROM DUAL UNION ALL
  SELECT '0002' EMP_ID, '09' DEPT, '90' WORK_PER FROM DUAL UNION ALL
  SELECT '0002' EMP_ID, '08' DEPT, '80' WORK_PER FROM DUAL UNION ALL
  SELECT '0003' EMP_ID, '07' DEPT, '80' WORK_PER FROM DUAL UNION ALL
  SELECT '0003' EMP_ID, '06' DEPT, '60' WORK_PER FROM DUAL UNION ALL
  SELECT '0003' EMP_ID, '05' DEPT, '70' WORK_PER FROM DUAL UNION ALL
  SELECT '0004' EMP_ID, '03' DEPT, '75' WORK_PER FROM DUAL UNION ALL
  SELECT '0004' EMP_ID, '04' DEPT, '95' WORK_PER FROM DUAL UNION ALL
  SELECT '0004' EMP_ID, '02' DEPT, '25' WORK_PER FROM DUAL
) EMP
GROUP BY EMP_ID
HAVING DEPTS LIKE '%03; 04%';

它类似于 Oracle 的 LISTAGG 函数,该函数按上述顺序聚合所述列值,并带有分隔符,在本例中为 '; '。我们正在聚合 DEPT 列并使用 EMP_ID 对其进行分组,最后检查聚合列是否包含由 '; '.

分隔的两个必需部门

希望这有助于解释。 :)