1

group by とロールアップを使用すると、次のクエリ結果が得られます。

Divison Department      Section     Employee Name   Employee ID Hours

Assets  Asset Strategy  Not Defined Monty Mouse     480193      64.00
Assets  Asset Strategy  Not Defined Frank Flint     480165      67.50
Assets  Asset Strategy  Not Defined                 480165      131.50
Assets  Asset Strategy                              480165      131.50
Assets  Event Centre    Not Defined Sally Spoons    800192      72.00
Assets  Event Centre    Not Defined Randolph Smith  800199      37.50
Assets  Event Centre    Not Defined Petra Peters    800195      64.00
Assets  Event Centre    Not Defined                 800195      173.50
Assets  Event Centre                                800195      173.50

私ができるようにしたいのは、ロールアップ行で従業員 ID が複製されないようにすることです。

Divison Department      Section     Employee Name   Employee ID Hours

Assets  Asset Strategy  Not Defined Monty Mouse     480193      64.00
Assets  Asset Strategy  Not Defined Frank Flint     480165      67.50
Assets  Asset Strategy  Not Defined                             131.50
Assets  Asset Strategy                                          131.50
Assets  Event Centre    Not Defined Sally Spoons    800192      72.00
Assets  Event Centre    Not Defined Randolph Smith  800199      37.50
Assets  Event Centre    Not Defined Petra Peters    800195      64.00
Assets  Event Centre    Not Defined                             173.50
Assets  Event Centre                                            173.50

ユニオンを使用して、ロールアップ以外のクエリから従業員を一致させようとする他の投稿を読みましたが、これはうまくいきませんでした。

サブセレクト(ラッピング)を使用して従業員IDを取得することについても読んだことがありますが、これは同じ結果につながりました。

部門、部門、セクション、および従業員名ごとに集計ステートメントをグループ化します。この句に従業員 ID を追加しようとすると、従業員が変更されるたびにロールアップが取得されます。また、名前とifフィールドの順序を変更し、名前ではなくIDでグループ化しようとしましたが、これはIDが上にあるのと同じ方法で名前を複製しただけです。

私はここで不可能な夢を追いかけていますか?実際にこの方法でデータを表示することはできませんか? どんな提案でも大歓迎です。

完全なクエリ コードが必要な場合は、次のとおりです。

select distinct
  hr_func_desc('CD_DEPT_', p.department) as 'Department',
  hr_func_desc('CD_DIVN_', p.division) as 'Division',
  hr_func_desc('CD_SECT_', p.section) as 'Section',
  pe.payroll_name as 'Employee Name',
  pe.employee_id as 'Employee ID',
  max(e.termination_date) as 'Termination Date',
  sum(ph.ordinary_hours) as 'Ordinary Hours',
  sum(ph.overtime_1_hours) as 'Overtime 1 Hours',
  sum(ph.overtime_2_hours) as 'Overtime 2 Hours',
  sum(ph.overtime_1_hours) + sum(ph.overtime_2_hours) as 'Total Overtime Hours',
  sum(ph.ordinary_hours) + sum(ph.overtime_1_hours) + sum(ph.overtime_2_hours) as 'Total Hours Worked',
  sum(al.units) as 'Number of Standby Worked',
  sum(ph.statutory_hours) as 'Statutory Holidays',
  sum(ph.annual_leave_hours) as 'Annual Leave',
  sum(ph.long_service_leave_hours) as 'Long Service Leave',
  sum(ph.special_leave_hours) as 'Special Leave',
  sum(ph.time_in_alt_hours) as 'Alt Lieu',
  sum(ph.parental_leave_hours) as 'Parental Leave',
  sum(ph.sick_hours) as 'Sick',
  sum(ph.domestic_leave_hours) as 'Domestic',
  sum(ph.bereavement_hours) as 'Bereavement',
  sum(ph.acc_week_1_hours) as 'ACC Week 1',
  sum(ph.acc_hours) as 'ACC Unpaid',
  sum(ph.lwop_hours) as 'Leave Without Pay',
  sum(ph.sick_hours) + sum(ph.domestic_leave_hours) + sum(ph.bereavement_hours) + sum(ph.annual_leave_hours) + sum(ph.statutory_hours) +
sum(ph.special_leave_hours) + sum(ph.long_service_leave_hours) + sum(ph.time_in_lieu_hours) + sum(ph.time_in_alt_hours) + sum(ph.lwop_hours) +
sum(ph.standby_leave_hours) + sum(ph.parental_leave_hours) + sum(ph.acc_week_1_hours) + sum(ph.acc_hours) as 'Total Hours Absent',
  sum(ph.ordinary_hours) + sum(ph.overtime_1_hours) + sum(ph.overtime_2_hours) + sum(ph.statutory_hours) + sum(ph.annual_leave_hours) + 
sum(ph.long_service_leave_hours) + sum(ph.special_leave_hours) + sum(ph.time_in_alt_hours) + sum(ph.sick_hours) + sum(ph.domestic_leave_hours)  +
sum(ph.bereavement_hours) + sum(ph.acc_week_1_hours) as 'Total Hours Paid',
  hr_func_normal_hours(pe.employee_id) as 'Normal Hours Worked per Week',
  sum(cast(pt.pay_weeks as unsigned integer)) as 'Pay Weeks for Period Chosen',
  round((sum(ph.ordinary_hours) + sum(ph.overtime_1_hours) + sum(ph.overtime_2_hours) + sum(ph.sick_hours) + sum(ph.domestic_leave_hours) +
   sum(ph.bereavement_hours) + sum(ph.statutory_hours) + sum(ph.special_leave_hours) + sum(ph.time_in_lieu_hours) + sum(ph.time_in_alt_hours) +
   sum(ph.lwop_hours) + sum(ph.acc_week_1_hours) + sum(ph.acc_hours) + sum(ph.standby_leave_hours) + sum(ph.parental_leave_hours))
/sum(cast(pt.pay_weeks as unsigned integer)), 2) as 'Calculated FTE Hours',
  truncate(((sum(ph.ordinary_hours) + sum(ph.overtime_1_hours) + sum(ph.overtime_2_hours) + sum(ph.sick_hours) + sum(ph.domestic_leave_hours) +
   sum(ph.bereavement_hours) + sum(ph.statutory_hours) + sum(ph.special_leave_hours) + sum(ph.time_in_lieu_hours) + sum(ph.time_in_alt_hours) +
   sum(ph.lwop_hours) + sum(ph.acc_week_1_hours) + sum(ph.acc_hours) + sum(ph.standby_leave_hours) + sum(ph.parental_leave_hours))
/sum(cast(pt.pay_weeks as unsigned integer)))/hr_func_normal_hours(pe.employee_id), 3) as 'Calculated FTE'
from swpayroll.py_employees pe
  left outer join swhr_rails.hr_employees e on e.id = pe.employee_id
  left outer join swhr_rails.hr_employee_positions ep on pe.employee_id = ep.employee_id
  left outer join swhr_rails.hr_positions p on ep.position_id = p.id
  left outer join swpayroll.py_rep_hist_hours ph on pe.employee_id = ph.employee_id
  left outer join swpayroll.py_hist_dedns_allowances al
    on al.employee_id = pe.employee_id
       and al.pay_date = ph.pay_date
       and al.da_id in (33, 66, 67)
  left outer join swpayroll.py_hist_totals pt on pt.employee_id = pe.employee_id and pt.pay_date = ph.pay_date
where ep.position_id = (select min(x.position_id) from swhr_rails.hr_employee_positions as x 
                         where x.employee_id = pe.employee_id and x.position_end is null)
      and ph.pay_date between '2012-10-21' and '2012-11-04'
group by
  hr_func_desc('CD_DEPT_', p.department),
  hr_func_desc('CD_DIVN_', p.division),
  hr_func_desc('CD_SECT_', p.section),
  pe.payroll_name with rollup;

コードの小さな断片:

select distinct
  hr_func_desc('CD_DEPT_', p.department) as 'Department',
  hr_func_desc('CD_DIVN_', p.division) as 'Division',
  hr_func_desc('CD_SECT_', p.section) as 'Section',
  pe.payroll_name as 'Employee Name',
  pe.employee_id as 'Employee ID',
  sum(ph.ordinary_hours) as 'Ordinary Hours'
from swpayroll.py_employees pe
  left outer join swhr_rails.hr_employees e on e.id = pe.employee_id
  left outer join swhr_rails.hr_employee_positions ep on pe.employee_id = ep.employee_id
  left outer join swhr_rails.hr_positions p on ep.position_id = p.id
  left outer join swpayroll.py_rep_hist_hours ph on pe.employee_id = ph.employee_id
  left outer join swpayroll.py_hist_dedns_allowances al
    on al.employee_id = pe.employee_id
       and al.pay_date = ph.pay_date
       and al.da_id in (33, 66, 67)
  left outer join swpayroll.py_hist_totals pt on pt.employee_id = pe.employee_id and pt.pay_date = ph.pay_date
where ep.position_id = (select min(x.position_id) from swhr_rails.hr_employee_positions as x 
                         where x.employee_id = pe.employee_id and x.position_end is null)
      and ph.pay_date between '2012-10-21' and '2012-11-04'
group by
  hr_func_desc('CD_DEPT_', p.department),
  hr_func_desc('CD_DIVN_', p.division),
  hr_func_desc('CD_SECT_', p.section),
  pe.payroll_name with rollup;
4

1 に答える 1