Odpracované roky (výkon práce) (sestava)

Z Prirucky

Odpracované roky (výkon práce) je sestava určená pro Generátor sestav II pro db platformu MS SQL.
Počet roků výkonu práce je určován na základě počtu dnů od zahájení pracovního poměru (do současnosti, příp. minulosti, pokud už je ukončen) s tím, že odečítají se dny určitých nepřítomností - v konkrétním případě dny rodičovské dovolené (mzd.pol.510).

Odpracovane roky-Vykon-prace-Sestava.png

SQL script

Pozor: U absencí, která mají datum_do vyšší než aktuální, počítá dny CHYBNĚ až do data_do.
select A.os_cislo, A.prijmeni, A.jmeno, B.cislo_pom, B.druh_pom, B.prac_str, B.datum_nastupu, B.datum_ukonc, case when (B.datum_ukonc is null or B.datum_ukonc > (select datum_prvni from par_map)) then (select datum_prvni from par_map) else B.datum_ukonc end as pom1,

case when (B.datum_ukonc is null or B.datum_ukonc > (select datum_prvni from par_map)) then datediff (dd, cast(B.datum_nastupu as date), (select cast(datum_prvni as date) from par_map)) else datediff (dd, cast(B.datum_nastupu as date), cast (B.datum_ukonc as date)) end as dny_pracpom,

isnull( (select sum( datediff (dd, cast(N.dat_od as date), cast(N.dat_do as date)) ) from absence N where kod = 510 and (zpet_propl is null or zpet_propl <> 's') and N.os_cislo = B.os_cislo and N.cislo_pom = B.cislo_pom ) , 0) as dny_510,

( case when (B.datum_ukonc is null or B.datum_ukonc > (select datum_prvni from par_map)) then datediff (dd, cast(B.datum_nastupu as date), (select cast(datum_prvni as date) from par_map)) else datediff (dd, cast(B.datum_nastupu as date), cast (B.datum_ukonc as date)) end - isnull( (select sum( datediff (dd, cast(N.dat_od as date), cast(N.dat_do as date)) ) from absence N where kod = 510 and (zpet_propl is null or zpet_propl <> 's') and N.os_cislo = B.os_cislo and N.cislo_pom = B.cislo_pom ) , 0) ) as rozdil,


floor ( ( case when (B.datum_ukonc is null or B.datum_ukonc > (select datum_prvni from par_map)) then datediff (dd, cast(B.datum_nastupu as date), (select cast(datum_prvni as date) from par_map)) else datediff (dd, cast(B.datum_nastupu as date), cast (B.datum_ukonc as date)) end - isnull( (select sum( datediff (dd, cast(N.dat_od as date), cast(N.dat_do as date)) ) from absence N where kod = 510 and (zpet_propl is null or zpet_propl <> 's') and N.os_cislo = B.os_cislo and N.cislo_pom = B.cislo_pom ) , 0) )/365 ) as poc_roku


from pracovnici A, prac_pom B where A.os_cislo = B.os_cislo

Odkazy