結算工資問題

2021-06-15 04:16:34 字數 4884 閱讀 6089

--結算工資問題

--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號了,因為這一天是發工資的日子 養家餬口就靠它了,呵呵 但是對於學校財務處的工作人員來說,這一天則是很忙碌的一天,財務處的小胡老師最近就在考慮乙個問題 如果每個老師的工資額都知道,最少需要準備多少張人民幣,才能在給每位老師發工資的時候都不用老師找零呢?這裡假設...