我编写了一个查询,该查询需要代表员工代码过滤掉员工数据。
例如,在我的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
请帮助我找出被过滤的员工人数
答案 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;