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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
| CREATE VIEW SIMULATION(Ouvrage, Date_Bilan, CTRF, PMA, PMD, F_HT, E41, E42, E43, E44)
with Simul_TARIF (Ouvrage, Date_Bilan, CTRF, PMA, PMD, F_HT, E41, E42, E43, E44)
-- définitions des variables de la CTE --
--STEP: -- station d'épuration
--SR: -- station de relevage
--CTRF: -- code tarif
--PMA: -- puissance maximale atteinte
--PMD: -- puissance mise à disposition
--F_HT: -- montant de la facture en HT
--E41: -- simulation avec le tarif E41
--E42: -- simulation avec le tarif E42
--E43: -- simulation avec le tarif E43
as
(select distinct
-- Ouvrage soit une STEP ou une SR
case
when d.nom_step is null then
'SR ' || e.nom_sr else
'STEP ' || d.nom_step
end Ouvrage,
a.date_mois,
c.code_tarif,
a.pma,
b.pmd,
a.montant_facture_ht,
-- E41
case
/* si apréciation_consigne = Majoration */
when (a.appreciation_consigne = 'Majoration') then
(a.cadran1 * 0.8533)
+ (a.cadran2 * 7.2668 )
+ (a.cadran3 * 1.6147)
+ (b.pmd * 21.54 )+ (coalesce(a.pma,0) * 96.79)
+ (coalesce(a.kvarh,0) * 0.07588)
+ 32227.79
else (a.cadran1 * 0.8533)
+ (a.cadran2 * 7.2668)
+ (a.cadran3 * 1.6147)
+ (b.pmd * 21.54 )+ (coalesce(a.pma,0) * 96.79)
+ 32227.79
end E41,
-- E42
case
/* si apréciation_consigne = Majoration */
when (a.appreciation_consigne = 'Majoration') then
(a.cadran2 * 7.2668)
+ (a.cadran1 + a.cadran3) * 1.5053
+ (b.pmd* 32.25) +( coalesce(a.pma,0)* 150.48)
+(coalesce(a.kvarh,0)* 0.3794) + 429.71
else (a.cadran2 * 7.2668)
+ (a.cadran1 + a.cadran3) * 1.5053
+ (b.pmd* 32.25) +( coalesce(a.pma,0)* 150.48)
+ 429.71
end E42,
-- E43
case
/* si apréciation_consigne = Majoration */
when (a.appreciation_consigne = 'Majoration') then
(a.cadran1 * 0.8533)
+ (a.cadran2 + a.cadran3) * 3.5692
+ (b.pmd * 32.25) +( coalesce(a.pma,0) * 128.80 )
+(coalesce(a.kvarh,0) * 0.3794) + 429.71
else (a.cadran1 * 0.8533)
+ (a.cadran2 + a.cadran3) * 3.5692
+ (b.pmd * 32.25) +( coalesce(a.pma,0) *128.80 )
+ 429.71
end E43,
-- E44
case
/* si apréciation_consigne = Majoration */
when (a.appreciation_consigne = 'Majoration') then
(a.ENERGIE_ACTIVE * 0.1548)
+ (b.pmd * 32.25) +( coalesce(a.pma,0) * 128.80 )
+(coalesce(a.kvarh,0) * 0.3794) + 429.71
else (a.ENERGIE_ACTIVE * 0.1548)
+ (b.pmd * 32.25) +( coalesce(a.pma,0) * 128.80 )
+ 429.71
end E44
from tb_energie a
inner join tb_contrat b on (b.num_client = a.num_client)
inner join tb_tarif c on (c.code_tarif = b.code_tarif)
left join tb_step d on (d.code_step = a.code_step)
left join tb_sr e on (e.code_sr = a.code_sr)
inner join tb_unite f on (f.code_unite = d.code_unite)
or (f.code_unite = e.code_unite)
where (a.date_mois between :date_debut and :date_fin)
)
Select
Ouvrage, -- station d'épuration ou station de relevage
Date_Bilan,
max(CTRF) TARIF, -- tarif de base
sum(F_HT) MONTNAT_HT, -- montant HT
count(*) nb_fois, -- nombre de fois où le tarif est avantageux
avg(E41) E41, -- simulation avec le tarif 41
avg(E42) E42, -- simulation avec le tarif 42
avg(E43) E43, -- simulation avec le tarif 43
avg(E44) E44, -- simulation avec le tarif 44
-- recherche du tarif le plus avantageux
-- avec affichage du code tarif
case
-- si le tarif n'est pas dans la gamme E4? alors afficher '/'
when (not(CTRF in ('E41','E42','E43')))
then '/'
-- si l'un des tarifs est nul alors arrêter la comparaison
-- et afficher '/'
when ((E41 is null) or (E42 is null) or (E43 is null))
then '/'
----------------------------------------------------------------
-- algorrithme de comparaison soit a, b, c des valeurs non nuls
----------------------------------------------------------------
/* si le résultat de (si( a > b alors
écrire b sinon écrire a )
> c) alors écrire c
sinon (si(a > b alors écrire b sinon écrire a) ) */
----------------------------------------------------------------
-- fin algorithme
----------------------------------------------------------------
when (
case
when (E41 > E42) then 42 else 41
end
) > E43 then 43
else (
case
when (E41 > E42) then 42 else 41
end
)
end TR_MIN,
-- affichage du gain
case
-- si le tarif n'est pas dans la gamme E4? alors afficher '/'
when (not(CTRF in ('E41','E42','E43')))
then '/'
-- si l'un des tarifs est nul alors arrêter la comparaison
-- et afficher '/'
when ((E41 is null) or (E42 is null) or (E43 is null))
then '/'
----------------------------------------------------------------
-- algorrithme de comparaison soit a, b, c des valeurs non nuls
----------------------------------------------------------------
/* si le résultat de (si( a > b alors
écrire b sinon écrire a )
> c) alors écrire c
sinon (si(a > b alors écrire b sinon écrire a) ) */
----------------------------------------------------------------
-- fin algorithme
----------------------------------------------------------------
when (
case
when (E41 > E42) then cast((F_HT-E42) as decimal(15,2))
else cast((F_HT-E41) as decimal(15,2))
end
) > E43 then cast((F_HT-E43) as decimal(15,2))
else (
case
when (E41 > E42) then cast((F_HT-E42) as decimal(15,2))
else cast((F_HT-E41) as decimal(15,2))
end
)
end TR_MIN_GAIN
From Simul_TARIF
group by Ouvrage, TR_MIN, TR_MIN_GAIN, Date_Bilan
order by Ouvrage,TR_MIN desc |
Partager