Vous essayez d'écrire une instruction sql pour Peoplesoft.SQL Developer - Instruction CASE avec critères
Mon instruction actuelle "fonctionne" mais la sortie est incorrecte. Voici le sql:
SELECT
A.EMPLID,
A.DEPTID,
A.LOCATION,
A.PAYGROUP,
A.STD_HOURS,
A.ANNUAL_RT,
A.COMPRATE,
SUM(case b.comp_ratecd when 'NAANNL' then b.comprate else 0 end) AS NAANNL,
sum(case b.comp_ratecd when 'NAHRLY' then b.comprate else 0 end) as NAHRLY,
sum(case C.ERNCD when '007' then (C.HOURLY_RT + C.OTH_PAY) else 0 end) as BASEFTO,
sum(case C.ERNCD when '013' then (C.HOURLY_RT + C.OTH_PAY) else 0 end) as DEFCOMP
FROM PS_JOB A
,PS_COMPENSATION B
,ps_addl_pay_data C
WHERE A.EFFDT =
(SELECT MAX(A_ED.EFFDT) FROM PS_JOB A_ED
WHERE A.EMPLID = A_ED.EMPLID
AND A.EMPL_RCD = A_ED.EMPL_RCD
AND A_ED.EFFDT <= SYSDATE)
AND A.EFFSEQ =
(SELECT MAX(A_ES.EFFSEQ) FROM PS_JOB A_ES
WHERE A.EMPLID = A_ES.EMPLID
AND A.EMPL_RCD = A_ES.EMPL_RCD
AND A.EFFDT = A_ES.EFFDT)
AND A.EMPL_STATUS = 'A'
AND A.EMPLID = B.EMPLID
AND A.EMPL_RCD = B.EMPL_RCD
AND A.EFFSEQ = B.EFFSEQ
AND B.EFFDT = A.EFFDT
AND A.EMPLID = C.EMPLID (+)
AND A.EMPL_RCD = C.EMPL_RCD (+)
group by A.EMPLID , A.DEPTID, A.LOCATION, A.PAYGROUP, A.STD_HOURS, A.ANNUAL_RT, A.COMPRATE
ORDER BY 1 ;
Le problème est que quand il y a 2 ou plusieurs lignes c.addl_pay_data, le montant sous les colonnes NAANNL et NAHRLY est multiplié par le nombre de lignes dans addl_pay_data.
J'apprécierais toute aide qui me dirait comment écrire ceci de sorte que lorsque le compte de erncd de addl_pay_data est> 0, alors prenez le comprate de compensation et divisez par le compte erncd. Si le compte est = 0, il suffit de lister le comprate de la compensation.
Merci pour toute aide que vous pouvez fournir.