Pages: 1
- Sujet précédent - Vue sous postgres - affectation d'un tarif en fonction de surface - Sujet suivant
#1 Mon 09 January 2012 17:07
- Loublande
- Participant occasionnel
- Date d'inscription: 29 Oct 2008
- Messages: 38
Vue sous postgres - affectation d'un tarif en fonction de surface
Bonjour,
Je travaille sur les enseignes dans le cadre de la TLPE (Taxe sur les enseignes).
Pour le moment, j'ai 53 enseignes qui sont facturées à 13 exploitants (fac_nom). A partir de ma base des enseignes, je connaitre la facture de chaque exploitant. pour ceci, j'ai fait la vue ci-dessous. Elle me calcule la somme des surfaces des enseigne de chacun des exploitants ainsi que le nombre d'enseignes concernées.
Probléme : j'aimerais que "enseigne.tarif" se remplissent automatiquement en fonction de "Total_surf" pour pouvoir avoir la somme à payer par exploitant. Mais, je n'y arrive pas. ex : si Total_surf >= 12 et <50 faire en sorte que la machine remplissent "enseigne.tarif" = 24, ....
Voici ma vue :
CREATE OR REPLACE VIEW reglementation.Synthese_enseigne AS
(SELECT
enseigne.fac_nom,
sum (enseigne.surface) as Total_surf,
count (type_dispositif) as nombre_dispositif,
enseigne.tarif,
sum(enseigne.surface*enseigne.tarif) as a_payer
FROM
reglementation.enseigne
WHERE enseigne.enseigne_active = 'Oui'
GROUP BY
enseigne.fac_nom,enseigne.tarif)
Je vous remercie par avance.
Hors ligne
#2 Mon 09 January 2012 18:17
Re: Vue sous postgres - affectation d'un tarif en fonction de surface
Bonjour,
un case doit fonctionner :
Code:
CREATE OR REPLACE VIEW reglementation.Synthese_enseigne AS (SELECT enseigne.fac_nom, sum (enseigne.surface) as Total_surf, count (type_dispositif) as nombre_dispositif, CASE WHEN (sum(enseigne.surface) >= 12 AND sum(enseigne.surface)<50) THEN 24 WHEN (sum(enseigne.surface) >= 50 AND sum(enseigne.surface)<100) THEN 36 ELSE 100 END as tarif, sum(enseigne.surface*enseigne.tarif) as a_payer FROM reglementation.enseigne WHERE enseigne.enseigne_active = 'Oui' GROUP BY enseigne.fac_nom,enseigne.tarif)
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
#3 Thu 12 January 2012 09:06
- Loublande
- Participant occasionnel
- Date d'inscription: 29 Oct 2008
- Messages: 38
Re: Vue sous postgres - affectation d'un tarif en fonction de surface
Bonjour,
Merci Mathieu pour votre réponse. Le "case" fonctionne pour l'affectation des tarifs en fonction de la surface totale.
Mais, la machine ne donne rien pour "sum(enseigne.surface*enseigne.tarif) as a_payer". (enseigne.surface et enseigne.tarif étant tous les 2 créés dans la vue).
En faisant une seconde, j'ai réussi à connaitre le "a_payer", mais y a t-il une solution pour tout faire dans la vue ci-dessus ?
Merci d'avance.
Hors ligne
#4 Thu 12 January 2012 19:01
- Christian B
- Participant occasionnel
- Date d'inscription: 14 Sep 2006
- Messages: 42
Re: Vue sous postgres - affectation d'un tarif en fonction de surface
en utilisant les windows functions ça devrait le faire :
CREATE OR REPLACE VIEW reglementation.Synthese_enseigne AS
(SELECT
enseigne.fac_nom,
sum (enseigne.surface) as Total_surf,
count (type_dispositif) as nombre_dispositif,
CASE
WHEN (sum(enseigne.surface) >= 12 AND sum(enseigne.surface)<50) THEN 24
WHEN (sum(enseigne.surface) >= 50 AND sum(enseigne.surface)<100) THEN 36
ELSE 100
END as tarif,
sum(enseigne.surface*enseigne.tarif) OVER (PARTITION BY enseigne.fac_nom) as a_payer
FROM
reglementation.enseigne
WHERE enseigne.enseigne_active = 'Oui'
GROUP BY
enseigne.fac_nom,enseigne.tarif)
Dernière modification par Christian B (Thu 12 January 2012 19:07)
Hors ligne
#5 Fri 13 January 2012 00:30
Re: Vue sous postgres - affectation d'un tarif en fonction de surface
Bonsoir,
désolé, j'ai répondu rapidement et partiellement, sur la partie en gras du post initial.
Je ne suis pas sûr de comprendre la logique du calcul du cout mais sum(enseigne.surface*enseigne.tarif) doit être équivalent à sum(enseigne.surface) * enseigne.tarif non ?
Si c'est le cas ceci devrait permettre de calculer ce qui manque :
Code:
sum (enseigne.surface) * CASE WHEN (sum(enseigne.surface) >= 12 AND sum(enseigne.surface)<50) THEN 24 WHEN (sum(enseigne.surface) >= 50 AND sum(enseigne.surface)<100) THEN 36 ELSE 100 END as a_payer
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
#6 Mon 16 January 2012 10:23
- Loublande
- Participant occasionnel
- Date d'inscription: 29 Oct 2008
- Messages: 38
Re: Vue sous postgres - affectation d'un tarif en fonction de surface
Merci, cela fonctionne à merveille
Hors ligne
Pages: 1
- Sujet précédent - Vue sous postgres - affectation d'un tarif en fonction de surface - Sujet suivant