有两个问题我正在获取一个给出今天缺席余额的查询 另一个会给昨天的缺席余额
今天的净权利:
query 1 :
select e.emp_no,
a.absence_code,
a.net_entitlement
from emp_details e,
absence_tab_history a
where a.person_id=e.person_id
and a.history_date=trunc(sysdate);
昨天的净权利:
query 2 :
select e.emp_no,
a.absence_code,
a.net_entitlement
from emp_details e,
absence_tab_history a
where a.person_id=e.person_id
and a.history_date=trunc(sysdate)-1;
现在查询1将获取今日净权利的列,例如
emp no. Absence code net entitlement
1 Sick Leave 9
2 Privilege Leave 5
3 Sick Leave 5
现在,查询2将获取昨天的员工净收入列
emp no. Absence code net entitlement
1 Sick Leave 10
2 Privilege Leave 5
3 Sick Leave 6
这意味着没有。 1和2的净权利已经改变,他们两人每人休假1次。现在我想创建一个捕获相同的查询。只有emp 1和2 也就是说,如果净权利已更改,则仅显示已更改的行。 减号不适用于此并且花费太多时间来执行。请帮助
答案 0 :(得分:0)
with present_day
as
(
select 1 as emp_id,'Sick Leave' as code , 9 as net_entitlement from dual
union
select 2 as emp_id,'Privilege Leave' as code , 5 as net_entitlement from dual
union
select 3 as emp_id,'Sick Leave' as code , 5 as net_entitlement from dual
),
yester_day
as
(
select 1 as emp_id,'Sick Leave' as code , 10 as net_entitlement from dual
union
select 2 as emp_id,'Privilege Leave' as code , 5 as net_entitlement from dual
union
select 3 as emp_id,'Sick Leave' as code , 6 as net_entitlement from dual
)
select a.emp_id,a.code,a.net_entitlement,decode(a.net_entitlement-b.net_entitlement,0,'UNCHG','CHNG')
from present_day a,yester_day b
where a.emp_id=b.emp_id and a.code=b.code
and decode(a.net_entitlement-b.net_entitlement,0,'UNCHG','CHNG')='CHNG'
尝试以上代码并告诉我
答案 1 :(得分:0)
您需要将数据放在表格中以进行比较。这是一种方法:
select e.emp_no, coalesce(a.absence_code, ath.absence_code) as absence_code,
a.net_entitlement, ath.net_entitlement
from emp_details e left join
absence_tab_history ath
on ath.person_id = e.person_id and
ath.history_date = trunc(sysdate) - 1 left join
absence_tab a
on a.person_id = e.person_id
where a.person_id is null or
ath.person_id is null or
ath.net_entitlement <> a.net_entitlement;
where
条款中的前两个条件适用于出现的新员工以及离职的前员工。