数据库SQL实战-10.获取所有非manager的员工emp_no

方法1:使用left join连接两张表,employees放在左边,然后选出dept_no为null的即可。 

select e.emp_no
from employees as e 
left join dept_manager as d
on e.emp_no = d.emp_no
where dept_no is null;

方法2:使用not in直接过滤掉manager即可。

select emp_no
from employees
where emp_no not in (select emp_no from dept_manager);

 

如下SQL需查找并统计年假未休请协助修改, 并优化oracle如下SQL性能,提高执行效率和减少资源占用: WITH V_DATA AS( SELECT HCP.SF_LSHR_NO_GET(A.EMP_CODE,19) WORK_PLACE, A.EMP_CODE,A.EMP_NAME,A.ANNUAL_LEAVE,A.YEAR FROM HCP.v_clk_tz_annual_leave A WHERE annual_leave>0 AND YEAR = 2025 --AND EMP_CODE='TZ143941' --AND ((TO_CHAR(SYSDATE, 'mm') IN ('04', '05', '06', '07', '08', '09') AND -- TRUNC(SYSDATE) IN -- (SELECT MAX(B.A) -- FROM (SELECT TRUNC(SYSDATE, 'mm') + ROWNUM - 1 A -- FROM DBA_OBJECTS -- WHERE ROWNUM < 32) B -- WHERE TO_CHAR(B.A, 'day') = 'friday ')) OR -- (TO_CHAR(SYSDATE, 'mm') IN ('10', '11') AND -- TO_CHAR(SYSDATE, 'Day') = 'Friday ') OR -- TO_CHAR(SYSDATE, 'mm') = '12') ), DEPT_PEOPLE AS( SELECT EMP_CODE,MEANING,HCP.SF_LSHR_NO_GET(MEANING, 8) V_EMAIL FROM ( SELECT T.EMP_CODE,MEANING,ROWNUM FROM V_DATA T JOIN HCP.KS_LOOKUP_VALUE KLV ON (KLV.REVERSE2 = SUBSTR(HCP.SF_LSHR_NO_GET(T.EMP_CODE, 15), LENGTH(HCP.SF_LSHR_NO_GET(T.EMP_CODE, 15))-5) OR KLV.REVERSE2 = HCP.SF_LSHR_NO_GET(T.EMP_CODE, 2)) WHERE KLV.LOOKUP_TYPE = 'DEPT_PEOPLE' AND KLV.ENABLED = 'Y' ORDER BY KLV.REVERSE2 DESC) WHERE ROWNUM = 1 ), V_CNT AS( SELECT DECODE(HPB.WORK_PLACE, 0, '一园', 1, '二园', 2, '三园', HPB.WORK_PLACE) AS PLANT, HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 14) DIV, HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 15) DEPT_NAME, HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 13) CLASS_NAME, COUNT(HPB.EMP_CODE) UNPEOPLE, SUM(HPB.ANNUAL_LEAVE) UNDAY, L.V_EMAIL || ';' || HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 9), 8) AS TOEMAIL, HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 10), 8) || ';' || HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 11), 8) AS CCEMAIL FROM V_DATA HPB JOIN DEPT_PEOPLE L ON HPB.EMP_CODE=L.EMP_CODE GROUP BY DECODE(HPB.WORK_PLACE, 0, '一园', 1, '二园', 2, '三园', HPB.WORK_PLACE), HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 14), HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 15), HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 13), L.V_EMAIL || ';' || HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 9), 8), HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 10), 8) || ';' || HCP.SF_LSHR_NO_GET(HCP.SF_LSHR_NO_GET(HPB.EMP_CODE, 11), 8) UNION ALL SELECT '合计', '', '', '', UNPEOPLE, UNDAY, '', '' FROM (SELECT COUNT(EMP_CODE) UNPEOPLE, SUM(ANNUAL_LEAVE) UNDAY FROM V_DATA) WHERE UNDAY IS NOT NULL ) SELECT PLANT 厂区, DIV 处级, DEPT_NAME 部门名称, CLASS_NAME 课别名称, UNPEOPLE 未休人数, UNDAY 未休天数, TOEMAIL, CCEMAIL FROM V_CNT ORDER BY PLANT, DIV, DEPT_NAME, CLASS_NAME;
最新发布
07-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值