--結算工資問題
--t_online 表 員工的生命週期表 員工每次調動,註冊,登出 都會存一條記錄在裡面
--t_running_mtcoststd 表 員工的工資 每次工資調整都會在裡面記一條記錄
--求 某一時間段內的 按部門彙總 求每個部門的工資總額
--時間段範圍 是 2010/01/01 到2010/12/31
create table t_online
(--結算工資問題
-- t_online表 員工的生命週期表 員工每次調動 都會存一條記錄在裡面
-- t_running_salry表 員工的工資 每次工資調整 都會在裡面記一條記錄
--求 某一時間段內的 按部門彙總 求每個部門的工資總額
--時間段範圍 是 2010/01/01 到2010/12/31
create table t_online
(c_belong number(18) not null, --所屬機構
c_onlinepsnid number(18) not null, --員工id
c_onlinedepartment number(18) not null, --部門id
c_ondate date not null, --開始時間
c_downdate date not null --結束時間
);create table t_running_salry
(c_belong number(18) not null, --所屬機構
c_psnid number(18) not null, --員工id
c_fromdate date not null, --工資計算開始日期
c_enddate date not null, --工資計算結束日期
c_standard number(8,2) --月工資(每日工資 需要按當前月份的天數 分攤)
);--比如 01-02-2010, 01-03-2010, 4500.00
--2月份每天的工資是4500/28
--3月1號那一天的工資是4500/31
--資料t_online
insert into t_online (c_belong, c_onlinepsnid, c_onlinedepartment, c_ondate, c_downdate)
values (4, 1, 1, to_date('01-01-2010', 'dd-mm-yyyy'), to_date('15-01-2010', 'dd-mm-yyyy'));
insert into t_online (c_belong, c_onlinepsnid, c_onlinedepartment, c_ondate, c_downdate)
values (4, 1, 2, to_date('16-01-2010', 'dd-mm-yyyy'), to_date('15-02-2010', 'dd-mm-yyyy'));
insert into t_online (c_belong, c_onlinepsnid, c_onlinedepartment, c_ondate, c_downdate)
values (4, 1, 1, to_date('16-02-2010', 'dd-mm-yyyy'), to_date('01-03-2010', 'dd-mm-yyyy'));
insert into t_online (c_belong, c_onlinepsnid, c_onlinedepartment, c_ondate, c_downdate)
values (4, 1, 2, to_date('02-03-2010', 'dd-mm-yyyy'), to_date('31-03-2010', 'dd-mm-yyyy'));
insert into t_online (c_belong, c_onlinepsnid, c_onlinedepartment, c_ondate, c_downdate)
values (4, 1, 1, to_date('01-04-2010', 'dd-mm-yyyy'), to_date('31-12-9999', 'dd-mm-yyyy'));
--資料t_running_salry
insert into t_running_salry (c_belong, c_psnid, c_fromdate, c_enddate, c_standard)
values (4, 1, to_date('01-01-2010', 'dd-mm-yyyy'), to_date('31-01-2010', 'dd-mm-yyyy'), 5000.00);
insert into t_running_salry (c_belong, c_psnid, c_fromdate, c_enddate, c_standard)
values (4, 1, to_date('01-02-2010', 'dd-mm-yyyy'), to_date('01-03-2010', 'dd-mm-yyyy'), 4500.00);
insert into t_running_salry (c_belong, c_psnid, c_fromdate, c_enddate, c_standard)
values (4, 1, to_date('02-03-2010', 'dd-mm-yyyy'), to_date('01-04-2010', 'dd-mm-yyyy'), 5000.00);
insert into t_running_salry (c_belong, c_psnid, c_fromdate, c_enddate, c_standard)
values (4, 1, to_date('02-04-2010', 'dd-mm-yyyy'), to_date('31-12-9999', 'dd-mm-yyyy'), 6000.00);
the new:
select t_all.c_onlinedepartment,
sum((t_all.c_stand / t_all.c_days) *
(t_all.c_max_date - t_all.c_min_date + 1)) c_cost
from (select distinct t_source.c_onlinedepartment,
t_source.c_onlinepsnid,
t_source.c_stand,
greatest(t_source.c_min_date,
add_months(trunc(t_source.c_min_date, 'mm'),
level - 1)) c_min_date,
least(t_source.c_max_date,
last_day(add_months(trunc(t_source.c_min_date,
'mm'),
level - 1))) c_max_date,
last_day(add_months(trunc(t_source.c_min_date, 'mm'),
level - 1)) -
add_months(trunc(t_source.c_min_date, 'mm'),
level - 1) + 1 c_days
from (select t_online.c_onlinedepartment c_onlinedepartment,
t_online.c_onlinepsnid c_onlinepsnid,
nvl(t_running_salry.c_standard, 0) c_stand,
least(t_online.c_downdate,
t_running_salry.c_enddate,
to_date('31/12/2010', 'dd/mm/yyyy')) c_max_date,
greatest(t_online.c_ondate,
t_running_salry.c_fromdate,
to_date('01/01/2010', 'dd/mm/yyyy')) c_min_date
from t_online, t_running_salry
where t_online.c_belong = t_running_salry.c_belong
and t_online.c_onlinepsnid = t_running_salry.c_psnid
and t_online.c_belong = 4
and least(t_online.c_downdate,
t_running_salry.c_enddate,
to_date('31/12/2010', 'dd/mm/yyyy')) >=
greatest(t_online.c_ondate,
t_running_salry.c_fromdate,
to_date('01/01/2010', 'dd/mm/yyyy'))
and (t_online.c_downdate >
to_date('01/01/2010', 'dd/mm/yyyy'))
and t_online.c_ondate <=
to_date('31/12/2010', 'dd/mm/yyyy')) t_source
connect by level <=
(12 * (to_number(to_char(t_source.c_max_date, 'yyyy')) -
to_number(to_char(t_source.c_min_date, 'yyyy'))) +
to_number(to_char(t_source.c_max_date, 'mm')) -
to_number(to_char(t_source.c_min_date, 'mm')) + 1)) t_all
group by t_all.c_onlinedepartment
php防止重複結算問題 實現購物車結算方法總結
這次給大家帶來實現購物車結算方法總結,實現購物車結算的注意事項有哪些,下面就是實戰案例,一起來看一下。購物車的話目前來說有三種,分別是儲存在cookie中或是session中,或是結合 資料庫儲存 第一種是儲存在cookie中 優點 1.cookie是儲存在客戶端的,且占用很少的資源,一般cooki...
PL SQL 員工漲工資問題
為員工漲工資,從最低工資漲起,每人漲10 但工資總額不能超過5萬元,請計算漲工資的人數和漲工資後的工資總額,並輸出漲工資人數及工資總額。sql語句 select empno,sal from emp order by sal 游標 迴圈 退出條件 1 工資總額 5萬 2 notfound 變數 1 ...
杭電老師工資問題
作為杭電的老師,最盼望的日子就是每月的8號了,因為這一天是發工資的日子 養家餬口就靠它了,呵呵 但是對於學校財務處的工作人員來說,這一天則是很忙碌的一天,財務處的小胡老師最近就在考慮乙個問題 如果每個老師的工資額都知道,最少需要準備多少張人民幣,才能在給每位老師發工資的時候都不用老師找零呢?這裡假設...