1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
with v as (
select C.REFERENCE as NUM_EDL
, DECODE(A.STATUT,1,'actif',2,'en cours de modification',3,'en cours de cessation') AS STATUT_CONTRAT
, A.DATECREATION
, F.LIBELLE as TYPE_COMPTEUR
, E.DATERELEVE
, G.LIBELLE as TYPE_INDEX
, G.VALEUR as INDEX_CONSO
, ROW_NUMBER() OVER (PARTITION BY C.REFERENCE, A.STATUT, A.DATECREATION, F.LIBELLE, G.LIBELLE ORDER BY E.DATERELEVE DESC) AS rn
, COUNT(*) OVER (PARTITION BY C.REFERENCE, A.STATUT, A.DATECREATION, F.LIBELLE, G.LIBELLE) cnt
from
VRP_CONTRAT A
left join CONTRAT_ESPACESDELIVRAISON B on B.SOURCE = A.ID
left join VRP_ESPACEDELIVRAISON C on C.ID = B.DEST
left join VRS_CONTRAT_RELEVES D on A.ID = D.SOURCE
left join VRP_RELEVE E on D.DEST = E.ID
left join VRS_CONFIGURATIONMATERIELLE F on F.ID = E.PACM_ID
left join VRS_GRANDEURPHYSIQUE G on G.RELEVE_ID = E.ID
where A.STATUT in (1, 2, 3)
and F.DATEFIN is null
and F.LIBELLE in ('BT HP/HC Electronique', 'BT HP/HC Electromécanique')
and E.NATURERELEVE in (1,6,41)
and E.STATUTRELEVE in (1, 3)
and lower(G.LIBELLE) like '%index nrj active%'
and E.DATERELEVE >=TO_DATE('01/01/2018 00:00','dd/mm/yyyy hh24:mi')
and E.DATERELEVE <=TO_DATE('31/10/2021 00:00','dd/mm/yyyy hh24:mi')
and (A.CODEGRD = 'G-EDF' or A.CODEFOURNISSEUR = 'F-EDF') and mod(A.ETATOBJET,2)=0
and (C.CODEGRD = 'G-EDF' or C.CODEFOURNISSEUR = 'F-EDF') and mod(C.ETATOBJET,2)=0
),
agg as (SELECT NUM_EDL,
STATUT_CONTRAT,
DATECREATION,
TYPE_COMPTEUR,
sum(case when type_index like '%HC%' and cnt > 1 then index_conso
when type_index like '%HC%' and cnt = 1 then -1
else 0
end) volume_HC ,
sum(case when type_index like '%HP%' and cnt > 1 then index_conso
when type_index like '%HP%' and cnt = 1 then -1
else 0
end) volume_HP
FROM v
WHERE rn <= 2
GROUP BY NUM_EDL,
STATUT_CONTRAT,
DATECREATION,
TYPE_COMPTEUR
)
select num_edl,
statu_contrat,
datecreation,
type_compteur,
case when volume_HC = -1 then 'erreur' else to_char(volume_HC) end volume_HC,
case when volume_HP = -1 then 'erreur' else to_char(volume_HP) end volume_HP
from agg; |
Partager