banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#2 Mon 09 January 2012 18:17

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1230
Site web

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

MathieuB
Membre du bureau
Lieu: Montpellier
Date d'inscription: 18 Jan 2006
Messages: 1230
Site web

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

 

Pied de page des forums

Powered by FluxBB