1

私はこの質問をしていますが、SQLでは不可能だと思うので解決できません

私はこのテーブルを持っています

Shedule
    id_emp    Name       `time initial` time end   
    1         juan`       09:00`          12:00
    2        Francisco    10:00           11:30
    3        Sebastian    11:00           15:00
    6        Roberto      15:00           18:00


Suspension
id_emp          suspension_initial     suspension_end
1                    2013-06-01           2013-06-01
2                    2013-06-01           2013-06-03
3                    2013-06-03           2013-06-04 
6                    2013-06-01           2013-06-01
2                    2013-07-01           2013-07-01
3                    2013-07-05           2013-07-05
1                    2013-07-06           2013-07-06

勤務時間を把握したい ((time_end- time_initial) - 一時停止) (1 日の一時停止がある場合は、1 時間の単位です。例: Juan は 1 日 3 時間働き、6 月に 1 日の一時停止と 1 日の一時停止があります。だから私は彼が 1 ヶ月で 3*20 (時間 * 日勤) - 6 月に 3 時間、7 月に 3 時間働くと仮定します。どうすればこの結果を得ることができますか?

id_emp name `       June-2013               July-2013
1       Juan           57 (hours Worked)        57 (hours Worked)
2       Francisco      24 (hours worked)        27 (hours worked)
3       Sebastián
6       Roberto
4

1 に答える 1

0

ここにSQLFiddelのデモがあります

以下は、試すことができるクエリです

select EmpHrs.ID_EMP,
       EmpHrs.Name,
       (
        (EmpHrs.NOOFHRS*20)-
        (EmpHrs.NOOFHRS*
          JuneSuspension.MONTHSUSPENSION)
       )  as "June-2013",
       (
        (EmpHrs.NOOFHRS*20)-
        (EmpHrs.NOOFHRS*
          JulySuspension.MONTHSUSPENSION)
       )  as "July-2013"

from 
(
select ID_EMP,NAME,
       Extract(Hours from time_end-time_initial)+
       Extract(Minutes from time_end-time_initial)/60 as NoOfHrs
  from schedule
) EmpHrs
Left join
(select ID_EMP,to_char(to_timestamp (Extract(Month from suspension_initial)::text, 'MM'),'Mon') as MonthIni,(suspension_end::date - suspension_initial::date)+1 MonthSuspension
from suspension
where Extract(Month from suspension_initial) = 6) JuneSuspension
On JuneSuspension.ID_EMP = EmpHrs.ID_EMP
Left join
(select ID_EMP,to_char(to_timestamp (Extract(Month from suspension_initial)::text, 'MM'),'Mon') as MonthIni,(suspension_end::date - suspension_initial::date)+1 MonthSuspension
from suspension
where Extract(Month from suspension_initial) = 7) JulySuspension
On JulySuspension.ID_EMP = EmpHrs.ID_EMP
于 2013-08-06T05:19:59.803 に答える