需要计算筛选出的员工

时间:2018-09-20 09:47:10

标签: sql oracle

我编写了一个查询,该查询需要代表员工代码过滤掉员工数据。 例如,在我的XYZ表中,我有200名员工,我需要在ABC表中插入这200名员工,但是在插入之前,我需要检查系统中是否存在全部200名员工,我首先过滤掉员工,然后插入我的ABC表中。

假设匹配200名员工中的180名,那么我将在ABC表中插入180名。 现在我需要计数200-180=20,所以我需要该差异计数。

我写了一个查询,但是它只获取匹配的记录,而不是那些过滤掉的员工数。

Select distinct SD.EMP_code 
FROm SALARY_DETAIL_REPORT_012018 SD  /*219 Employees*/
JOIN 
(SELECT * FROM EMPLOYEE) tbl
ON tbl.EMP_CODE=to_char(SD.EMP_CODE)
WHERE SD.REFERENCE_ID like '1-%';

final output : 213 employees

我想要219-213 = 6 我想要那些6员工。我也尝试过INTERSECT,但结果却相同。

Select distinct to_char(SD.EMP_code) 
FROm SALARY_DETAIL_REPORT_012018 SD
WHERE SD.REFERENCE_ID like '1-%'
INTERSECT
SELECT EMP_CODE FROm EMPLOYEE;

输出

213 Employees

请帮助我找出被过滤的员工人数

2 个答案:

答案 0 :(得分:1)

您可以使用NOT EXISTS

SELECT DISTINCT SD.EMP_code 
FROM SALARY_DETAIL_REPORT_012018 sd
WHERE NOT EXISTS (SELECT 1 FROM EMPLOYEE e WHERE e.EMP_CODE = TO_CHAR(SD.EMP_CODE)) AND
      SD.REFERENCE_ID LIKE '1-%';

答案 1 :(得分:0)

除操作符外使用

Select distinct to_char(SD.EMP_code) 
FROM SALARY_DETAIL_REPORT_012018 SD
WHERE SD.REFERENCE_ID like '1-%'
except
SELECT EMP_CODE FROm EMPLOYEE;