Sql 需要统计过滤后的员工

Sql 需要统计过滤后的员工,sql,oracle,Sql,Oracle,我编写了一个查询,需要代表员工代码过滤出员工数据。 例如,在我的XYZ表中,我有200名员工,我需要在ABC表中插入这200名员工,但在插入之前,我需要检查系统中是否存在所有200名员工,我首先过滤掉该员工,然后插入到我的ABC表中 假设200名员工中有180名匹配,那么我将在ABC表中插入180名。 现在我需要计数200-180=20,所以我需要差分计数 我写了一个查询,但它只获取匹配的记录,而不是过滤掉的员工数 Select distinct SD.EMP_code FROm SALARY

我编写了一个查询,需要代表员工代码过滤出员工数据。 例如,在我的
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

请帮助我了解筛选员工的数量

您可以使用
不存在

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-%';

您可以使用
不存在

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-%';
除操作器外使用

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;
除操作器外使用

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;

except
是sql-server。非常感谢您的Vamsi和Anjali,但我使用的是Oracle 11guse-minus而不是Exception操作符。
except
是sql-server。非常感谢您的Vamsi和Anjali,但我使用的是Oracle 11guse-minus而不是Exception操作符。哇,这对我来说确实很有效,但为什么您硬编码1而不是使用countwow,这对我来说真的很有用,但是为什么你硬编码1而不是使用count呢