WITH w_final as ( select sum_ym , to_char(add_months(to_date(sum_ym,'YYYYMM'),-1), 'YYYYMM') sum_pym , substr(sum_ym, 1,4) sum_year , substr(sum_ym, 5,2) sum_month , to_char(add_months(to_date(sum_ym,'YYYYMM'),-12), 'YYYY') sum_pyear , day_month , day_month - holiday_cnt(sum_ym||'01',1, sum_ym||day_month,1,1) as total_day , pay_emer , pay_comm , pay_intern , hpay1 , hpay2 , pay_unemins , #{consultType} search_group , #{searchNo} search_no , #{searchNm} search_nm , #{searchState} search_state from ( select #{selYear}||#{selMonth} sum_ym , to_char(last_day(to_date(#{selYear}||#{selMonth},'YYYYMM')),'DD') day_month from dual ) , ( select pay_comm, pay_emer, pay_intern from (select code, trim(cd_desc) cd_desc from tb_cccddatas where cd_classfier = 'C1040') pivot ( max(cd_desc) for code in ('PY001' as pay_comm ,'PY002' as pay_emer ,'PY003' as pay_intern)) ) , ( select hpay1, hpay2 from (select code, trim(cd_desc) cd_desc from tb_cccddatas where cd_classfier = 'C1041') pivot ( max(cd_desc) for code in ('PT001' as hpay1 ,'PT002' as hpay2)) ) , ( select pay_unemins from (select code, trim(cd_desc) cd_desc from tb_cccddatas where cd_classfier = 'C1042') pivot ( max(cd_desc) for code in ('PE001' as pay_unemins)) ) ) , w_nhis AS ( select emp_no reg_no ,nm emp_nm ,trim(insurance) insurance from vi_upload_nh, w_final f where ins_date like f.sum_ym||'%' ) , w_nps AS ( select substr(pers_contrib, 1,6) reg_no ,nm emp_nm ,base_income ,insur_mon ,trim(empler_contrib) empler_contrib ,substr(pers_contrib, 1,6) pers_contrib from vi_upload_np, w_final f where ins_date like f.sum_ym||'%' ) , w_nt AS ( select 'Y' data_yn, pay_mon_lb, pay_mon_ub , size_fam_deduct01, size_fam_deduct02, size_fam_deduct03, size_fam_deduct04, size_fam_deduct05, size_fam_deduct06, size_fam_deduct07, size_fam_deduct08, size_fam_deduct09, size_fam_deduct10, size_fam_deduct11 from vi_upload_nt, w_final f where ins_date like f.sum_pyear||'%' ) , w_incpay AS ( select ie.emp_no ,ie.grade ,trim(ib.base) inc_base from vi_upload_ie ie inner join w_final f on 1=1 inner join vi_upload_ib ib on ib.ins_date like f.sum_ym||'%'and ib.grade=ie.grade where ie.ins_date like f.sum_ym||'%' ) , w_agtpay as ( select emp_no, min(confirm_yn) agt_confirm_yn from tb_cmagtpay, w_final f where pay_ym = f.sum_ym and (acdgrp like f.search_group||'%') and (emp_no like f.search_no||'%') group by emp_no ) , w_emp_info as ( select min(f.total_day) total_day, nvl(sum(d.cut_day),0) cut_day, nvl(sum(d.baby_break),0) baby_break, nvl(sum(d.bear_vac),0) bear_vac, min(f.total_day)-nvl(sum(d.cut_day),0)-nvl(sum(d.baby_break),0)-nvl(sum(d.bear_vac),0) + (SELECT sum(mens) FROM tb_cmagtduty WHERE substr(duty_ymd,1,6) = #{selYear}||#{selMonth} AND emp_no = a.emp_no) real_day_pay_house, -- °¡°èÁö¿øºñ °è»ê ½Ã º¸°ÇÈÞ°¡ Á¦¿Ü 0 and MIN(substr(f.sum_ym, 5,2)) - MIN(SUBSTR(d.duty_ymd, 5,2)) = '0' -- ù°´ÞÀ̸é then min(f.total_day) - 0 when NVL(SUM(d.bear_vac),0) <> 0 and MIN(substr(f.sum_ym, 5,2)) - MIN(substr(d.duty_ymd, 5,2)) = '1' -- µÑ°´ÞÀ̸é then min(f.total_day) - 0 when NVL(SUM(d.bear_vac),0) <> 0 and MIN(substr(f.sum_ym, 5,2)) - MIN(substr(d.duty_ymd, 5,2)) = '2' -- ¼¼Â°´ÞÀ̸é then min(f.total_day) - ( (MIN(day_month) - MIN(substr(d.duty_ymd, 7,2))) - holiday_cnt(MIN(f.sum_ym)||MIN(substr(d.duty_ymd, 7,2)),1, MIN(f.sum_ym)||MIN(day_month),1,1) ) -- ÈÞ°¡½ÃÀÛÀϺÎÅÍ ÀÌ´Þ ¸¶Áö¸·³¯±îÁö ÀÏ¿äÀÏ°è»êÇؼ­ »«´Ù. when NVL(SUM(d.bear_vac),0) <> 0 and MIN(substr(f.sum_ym, 5,2)) - MIN(substr(d.duty_ymd, 5,2)) = '3' -- ³×°´ÞÀ̸é then min(f.total_day) - (MIN(substr(d.duty_ymd, 7,2))) - holiday_cnt(MIN(f.sum_ym)||'01',1, MIN(f.sum_ym)||substr(MIN(d.duty_ymd), 7,2),1,1) else min(f.total_day)-nvl(sum(d.cut_day),0)-nvl(sum(d.baby_break),0)-nvl(sum(d.bear_vac),0) end , '20', case when NVL(SUM(d.baby_break),0) <> 0 and MIN(substr(f.sum_ym, 0,6)) - MIN(SUBSTR(d.duty_ymd, 0,6)) = '0' then min(f.total_day) - (MIN(substr(d.duty_ymd, 7,2))) - holiday_cnt(MIN(f.sum_ym)||'01',1, MIN(f.sum_ym)||substr(MIN(d.duty_ymd), 7,2),1,1) when NVL(SUM(d.baby_break),0) <> 0 and MIN(substr(f.sum_ym, 0,6)) - MIN(SUBSTR(ADD_MONTHS(TO_DATE(d.duty_ymd,'YYYYMMDD'), 12), 0,6)) = '0' then min(f.total_day) - ( (MIN(day_month) - MIN(substr(d.duty_ymd, 7,2))) - holiday_cnt(MIN(f.sum_ym)||MIN(substr(d.duty_ymd, 7,2)),1, MIN(f.sum_ym)||MIN(day_month),1,1) ) else NULL end , '30', case when min(a.wk_end_ymd) = min(f.sum_ym||min(SUBSTR(a.wk_end_ymd, 7,2))) then min(f.total_day) - (MIN(substr(a.wk_end_ymd, 7,2))) - holiday_cnt(MIN(f.sum_ym)||'01',1, MIN(f.sum_ym)||substr(MIN(a.wk_end_ymd)-1, 7,2),1,1) else NULL END , null ) real_day1, ]]> min(f.sum_ym) pay_ym, a.emp_no, min(a.emp_nm) emp_nm, min(a.emp_no) reg_no, min(d.confirm_yn) confirm_yn, min(b.acd_group) acd_group, trim(min(b.acd_nm)) acd_nm, min(a.rule_cd) rule_cd, min(a.work_emp_type) work_emp_type, -- °í¿ëÇüÅ min(a.wk_status_cd) wk_status_cd, -- »ó´ã¿ø »óÅ 30 ÈÞÁ÷, 20Åð»ç min(a.org_yn) org_yn, min(trim(a.wk_start_ymd)) wk_start_ymd, min(a.wk_end_ymd) wk_end_ymd, min(f.day_month) day_month, nvl(sum(d.absent),0) absent, nvl(min(inc.inc_base),0) pay_class, nvl2(min(inc.inc_base),'N','Y') incpay_err, min(f.total_day) - case when min(trim(a.wk_start_ymd)) is not null and ( to_number(min(trim(a.wk_start_ymd))) - to_number(min(f.sum_ym)||'01') ) > 0 then holiday_cnt(min(f.sum_ym)||'01',1, min(a.wk_start_ymd),0, 1) else 0 end - case when min(trim(a.wk_end_ymd)) is not null and ( to_number(min(f.sum_ym)||min(f.day_month)) - to_number(min(trim(a.wk_end_ymd))) +1 ) > 0 then holiday_cnt(min(a.wk_end_ymd),1, min(f.sum_ym)||min(f.day_month),1, 1) else 0 end - nvl(sum(d.absent),0) as day_work, nvl(sum(late),0) + nvl(sum(outting),0) + nvl(sum(early),0) as hpay_minus, case when min(trim(a.wk_start_ymd)) is null then 0 else floor((min(f.sum_ym)||'31' - min(a.wk_start_ymd)) / 10000) end work_year, case when min(a.rule_cd) = '62' or min(a.rule_cd) = '10' then 30000 else 0 end pay_assadm, case when '0' ='1' then 400000 else 0 end pay_tradhol from tb_caagent a inner join tb_caacdagt c on a.emp_no = trim(c.emp_no) inner join tb_ccacdgroup b on b.acd_group = c.acd_group inner join w_final f on 1=1 left join tb_cmagtduty d on (d.duty_ymd between f.sum_ym||'01' and f.sum_ym||'31' and a.emp_no = d.emp_no and d.confirm_yn = 'Y') left join w_incpay inc on inc.emp_no = a.emp_no where --a.org_yn!='Y' and a.rule_cd in('10','20','70','80','60','55')-- and a.wk_status_cd in ('10', '20', '30') AND (a.wk_end_ymd IS NULL OR a.wk_end_ymd = f.sum_ym||'%') group by a.emp_no ) , w_emp_pay as ( select a.emp_no, a.emp_nm, a.reg_no, a.acd_group, a.acd_nm, a.cut_day, a.baby_break, a.bear_vac, --a.real_day, a.real_day1, a.pay_ym, a.confirm_yn, a.rule_cd, a.work_emp_type, a.wk_status_cd, a.org_yn, a.wk_start_ymd, a.wk_end_ymd, a.day_month, a.absent, a.pay_class, a.incpay_err, a.day_work, a.hpay_minus, a.work_year, a.pay_assadm, a.pay_tradhol, case when a.work_emp_type = '04' then '0' when a.acd_group = '1400' then f.hpay2 else f.hpay1 end hpay, --½Ã¿ëÁ÷ ±âº»±Þ(2016.03. ½Å±Ô ¿ä±¸»çÇ×) case when a.work_emp_type = '04' then floor(f.pay_intern *a.real_day1 /f.total_day /10)*10 when a.acd_group = '1400' -- Åð»ç '20' Ãß°¡ then case when a.wk_status_cd = '30' then 0 else floor(f.pay_emer *a.real_day1 /f.total_day /10)*10 end else case when a.wk_status_cd = '30' then 0 else floor(f.pay_comm *a.real_day1 /f.total_day /10)*10 end end pay_basic, --ÈÞÁ÷ÀÚ ±âº»±Þ °è»ê(ÈÞÁ÷ÀÚ ÀÏ °æ¿ì °¡°èÁö¿øºñ Â÷°¨) case when a.work_emp_type = '04' then floor(50000 *a.real_day1 /f.total_day /10)*10 else floor(100000 *a.real_day1 /f.total_day /10)*10 end pay_lunch, --Á߽ĺñ(½Ã¿ëÁ÷ÀÏ °æ¿ì Àý¹Ý¸¸ ÁÜ) case when a.work_emp_type = '04' then floor(50000 *a.real_day1 /f.total_day /10)*10 else floor(100000 *a.real_day1 /f.total_day /10)*10 end pay_trans, --±³Åëºñ(½Ã¿ëÁ÷ÀÏ °æ¿ì Àý¹Ý¸¸ ÁÜ) case when a.work_emp_type = '01' then floor(100000 * a.real_day_pay_house /f.total_day /10)*10 else 0 end pay_house, --°¡°èÁö¿øºñ(01 ¹«±â°è¾àÁ÷; 2016.03. ½Å±Ô ¿ä±¸»çÇ×) case when a.work_year = 0 then 0 else (a.work_year-1) * 10000 + decode(a.work_year,0,0,30000) end pay_senior, case a.rule_cd when '70'/*ÆÀÀå*/ then case when f.total_day = a.day_work then 300000 else floor(300000 *a.day_work /f.day_month /10)*10 end when '80'/*ºÎÆÀÀå*/ then case when f.total_day = a.day_work then 200000 else floor(200000 *a.day_work /f.day_month /10)*10 end when '20'/*ÆÄÆ®Àå*/ then case when f.total_day = a.day_work then 100000 else floor(100000 *a.day_work /f.day_month /10)*10 end else 0 end pay_long, case when a.rule_cd = '11' or a.rule_cd = '61' then floor(50000 *a.day_work /f.day_month /10)*10 else 0 end pay_right -- ¾ß°£ from w_emp_info a, w_final f ) , w_pay_extra as ( select a.emp_no, b.acd_group, min(a.org_yn) org_yn, min(a.rule_cd) rule_cd, min(a.wk_status_cd) wk_status_cd, min(e.hpay) hpay, sum(d.extwk) extwk, sum(d.nightwk) nightwk, round(case when min(f.sum_month) = '01' then 0 else nvl(sum(d.extwk),0)*1.5*min(e.hpay) end) pay_wk, round(case when min(f.sum_month) = '01' then 0 else nvl(sum(d.nightwk),0)* 0.5 *min(e.hpay) end) pay_ot from tb_caagent a inner join tb_caacdagt c on a.emp_no = trim(c.emp_no) inner join tb_ccacdgroup b on b.acd_group = c.acd_group inner join w_emp_pay e on e.emp_no=a.emp_no inner join w_final f on 1=1 left join tb_cmagtduty d on ( ( f.sum_month = '12' and d.duty_ymd between f.sum_pym||'01' and f.sum_ym||'31' or f.sum_month = '01' and d.duty_ymd like f.sum_pym||'%' or f.sum_month != '12' and f.sum_month != '01' and d.duty_ymd like f.sum_pym||'%' ) and a.emp_no = d.emp_no and d.confirm_yn = 'Y') where --a.org_yn!='Y' and a.rule_cd in('10', '20','70','80','60','55')-- and a.wk_status_cd in ('10', '20', '30') AND (a.wk_end_ymd IS NULL OR a.wk_end_ymd = f.sum_ym||'%') and (b.acd_group like f.search_group||'%') and (a.emp_no like f.search_no||'%') and (a.emp_nm like f.search_nm||'%') group by a.emp_no, b.acd_group ) , w_pay_info as ( select z.emp_no, z.emp_nm, z.reg_no, z.acd_group, z.acd_nm, w.pay_wk, w.pay_ot, w.extwk, w.nightwk, z.pay_assadm pay_misc, (z.pay_basic+z.pay_lunch+z.pay_trans+ w.pay_wk+w.pay_ot +z.pay_class+z.pay_long+z.pay_senior+z.pay_assadm+z.pay_house) pay_amt, z.pay_basic, z.pay_lunch, z.pay_trans, z.pay_class, z.incpay_err, z.pay_senior, z.pay_long, z.cut_day, z.baby_break, z.bear_vac, --z.real_day, z.real_day1, z.pay_ym, z.confirm_yn, z.rule_cd, z.work_emp_type, z.wk_status_cd, z.org_yn, z.wk_start_ymd, z.wk_end_ymd, z.day_month, z.absent, z.day_work, z.hpay_minus, z.work_year, z.pay_assadm, z.pay_tradhol, z.hpay, z.pay_house, z.pay_right from w_emp_pay z, w_pay_extra w where z.emp_no = w.emp_no and z.acd_group = w.acd_group ) , w_deduct as ( select f.sum_ym, q.emp_no, q.reg_no, nvl2(( select data_yn from w_nt where pay_mon_lb * 1000 <=(q.pay_amt-q.pay_lunch) and pay_mon_ub * 1000 >(q.pay_amt-q.pay_lunch) ),'N','Y') nt_err, nvl(( select size_fam_deduct01 from w_nt where pay_mon_lb * 1000 <=(q.pay_amt-q.pay_lunch) and pay_mon_ub * 1000 >(q.pay_amt-q.pay_lunch) ),0) tax_income, floor(nvl(( select size_fam_deduct01 from w_nt where pay_mon_lb * 1000 <=(q.pay_amt-q.pay_lunch) and pay_mon_ub * 1000 >(q.pay_amt-q.pay_lunch) ),0)/10) tax_jumin, nvl(w_nps.empler_contrib,0) tax_pension, nvl2(w_nps.empler_contrib,'N','Y') nps_err, nvl(w_nhis.insurance, 0) tax_insu, nvl2(w_nhis.insurance,'N','Y') nhis_err, floor(NVL(q.pay_amt*f.pay_unemins,0)/10)*10 tax_emp, q.hpay*q.hpay_minus tax_misc, q.confirm_yn, agt_confirm_yn from w_pay_info q inner join w_final f on 1=1 left join w_nhis on w_nhis.reg_no = q.reg_no left join w_nps on w_nps.reg_no = q.reg_no left join w_agtpay ap on ap.emp_no=q.emp_no ) , TBL as ( select r.emp_nm, case when (trim(d.agt_confirm_yn) is not null and trim(d.agt_confirm_yn) ='Y') then 'È®Á¤. ' end || case when (trim(r.confirm_yn) is null or trim(r.confirm_yn) !='Y') then '±Ù¹«Á¤º¸ ¹ÌÈ®Á¤. ' end || case when d.nhis_err='Y' then '°Ç°­º¸Çè EXCEL Ç׸ñ ´©¶ô. ' end || case when d.nps_err='Y' then '±¹¹Î¿¬±Ý EXCEL Ç׸ñ ´©¶ô. ' end || case when d.nt_err='Y' then '°£À̼¼¾×Ç¥ EXCEL Ç׸ñ ¹üÀ§ ´©¶ô. ' end || case when r.incpay_err='Y' then '¼º°ú±Þ EXCEL Ç׸ñ ´©¶ô. ' end as prc_stat, r.acd_nm, r.emp_no, r.wk_start_ymd, r.pay_basic, r.pay_lunch, r.pay_trans, r.pay_wk, r.pay_ot, r.pay_class, r.pay_senior, r.pay_long, r.pay_house, r.pay_right, r.pay_misc, r.pay_tradhol, r.pay_amt, d.tax_pension, d.tax_insu, d.tax_emp, d.tax_income, d.tax_jumin, d.tax_misc, (d.tax_income+d.tax_jumin+d.tax_pension+d.tax_insu+d.tax_emp+d.tax_misc) tax_amt, nvl((r.pay_amt-(d.tax_income+d.tax_jumin+d.tax_pension+d.tax_insu+d.tax_emp+d.tax_misc)),0) sal, f.sum_ym, f.sum_pym, f.sum_year, f.sum_month, f.sum_pyear, f.day_month, f.total_day, f.pay_emer, f.pay_comm, f.pay_intern, f.hpay1, f.hpay2, f.pay_unemins, f.search_no, f.search_nm, f.search_state, r.reg_no, r.acd_group, d.nhis_err, d.nps_err, d.nt_err, r.incpay_err, r.confirm_yn, d.agt_confirm_yn, r.cut_day, r.baby_break, r.bear_vac, --r.real_day, r.real_day1, r.rule_cd, r.work_emp_type, r.wk_status_cd, r.org_yn, r.wk_end_ymd, r.extwk, r.nightwk, r.absent, r.day_work, r.hpay_minus, r.work_year, r.pay_assadm, r.hpay from w_pay_info r inner join w_final f on 1=1 left join w_deduct d on d.emp_no=r.emp_no where d.nhis_err='Y' where d.nps_err='Y' where d.nt_err='Y' where r.incpay_err='Y' where (trim(r.confirm_yn) is null or trim(r.confirm_yn) !='Y') where (trim(d.agt_confirm_yn) is null or trim(d.agt_confirm_yn) !='Y') ) SELECT * FROM ( SELECT LIST.*, ceil(ROWNUM/#{rows}) AS pageNum, count(ROWNUM) over() - ROWNUM + 1 rnum, CNT.recordNum FROM (select count(*) AS recordNum from TBL) CNT, (select * from TBL order by acd_group, emp_nm order by ${sidx} ${sord} ) LIST ) WHERE pageNum=#{page}