如何找到在特定部门工作的员工
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
对其进行分组,最后检查聚合列是否包含由 '; '
.
分隔的两个必需部门
希望这有助于解释。 :)
如何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
对其进行分组,最后检查聚合列是否包含由 '; '
.
希望这有助于解释。 :)