IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Faire une somme pour chaque table désirée ? [9.1]


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut Faire une somme pour chaque table désirée ?
    Bonjour,

    Je fais suite à ma question précédente cf post ici. et pose ici une nouvelle question pour aller plus loin.

    En lançant le code suivant, j'ai bien les sommes qui se font pour l'année 2013.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    SELECT
      A.id_code,
      A.code														AS CODE, 
      A.intitule_code													AS NOM,
      B.libelle														AS GROUPE,
      CASE		WHEN id_parent = 0	THEN num_cpte
    		Else codcpt || num_cpte
    		END													AS sous_compte,
      SUM(CASE	WHEN E.id = 1		THEN 1 Else 0 END)								AS "PC1",
      SUM(CASE	WHEN E.id = 2		THEN 1 Else 0 END)								AS "PC2",
      SUM(CASE	WHEN E.id = 3		THEN 1 Else 0 END)								AS "PC3",
      SUM(CASE	WHEN E.id = 4		THEN 1 Else 0 END)								AS "PC4",
      SUM(CASE	WHEN E.id = 5		THEN 1 Else 0 END)								AS "PC5",
      SUM(CASE	WHEN codcpt || num_cpte = F2013.cptdeb AND A.id_code = F2013.code_1 THEN F2013.montant Else 0 END)	AS A2013
    --  SUM(CASE	WHEN codcpt || num_cpte = F.cptdeb AND A.id_code = F.code_1 THEN F.montant Else 0 END)			AS A2014
    FROM 
      base.code_1 AS A
            LEFT OUTER JOIN base.asso_code_1_sc AS C
                    ON A.id_code = C.id_code AND A.id_groupe = C.id_groupe
                            LEFT JOIN base.plancpt_lib AS E
                                    ON C.id_plan = E.id
                            LEFT JOIN base.sous_compte AS D
    				ON D.id_souscompte = CAST (C.no_compte AS integer)
    	LEFT OUTER JOIN base.r2013mou AS F2013
    		ON A.id_code = F2013.code_1 AND codcpt || num_cpte = F2013.cptdeb
    	LEFT OUTER JOIN base.rmouvt AS F
    		ON A.id_code = F.code_1 AND codcpt || num_cpte = F.cptdeb
    --	LEFT JOIN base.groupes_codes_adm AS B
    --             ON A.id_groupe = B.id AND B.id = C.id_groupe
    WHERE   A.id_code = 54 OR A.id_code = 28 OR A.id_code = 410
    GROUP BY A.id_code,CODE,NOM,GROUPE,sous_compte
    ORDER BY 1;
    Si je le fais uniquement pour l'année en cours => table rmouvt, cela fonctionne aussi.
    Par contre si je dé-commente les lignes pour ajouter l'année en cours et donc faire la somme pour 2013 et 2014, toutes les sommes sont complètement faussées.
    Comment régler ce problème ?

    Cordialement,
    vandman

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Quelles sommes sont faussées ?

  3. #3
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut
    Bonjour,

    En lançant le code précédent, j'ai bien les sommes qui se font pour l'année 2013 (SUM (...) AS A2013=> table r2013mou).
    Si je le fais uniquement pour l'année 2014 (SUM (...) AS A2014=> table rmouvt), cela fonctionne aussi.
    Par contre, si je dé-commente les lignes pour faire les sommes sur les deux années (les deux tables, r2013mou, rmouvt) pour 2013 et 2014, toutes les sommes sont complètement faussées (celles qui m'intéresse sont celles pour les années 2013 et 2014).

    Je pense que le problème est que j'essaye de faire des sommes sur des tables différentes. Le seul hic est que je dois faire ces deux sommes. Comment faire ?

    Les autres sommes ne sont pas intéressantes. J'ai déjà corrigé cette partie du code en supprimant la somme et en laissant le CASE. Ce n'est pas dérangeant, car la relation entre le code, le sous-compte et le plan comptable est de 1 pour 1 dans tous les cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      SUM(CASE	WHEN E.id = 1		THEN 1 Else 0 END) AS "PC1",
      SUM(CASE	WHEN E.id = 2		THEN 1 Else 0 END) AS "PC2",
      SUM(CASE	WHEN E.id = 3		THEN 1 Else 0 END) AS "PC3",
      SUM(CASE	WHEN E.id = 4		THEN 1 Else 0 END) AS "PC4",
      SUM(CASE	WHEN E.id = 5		THEN 1 Else 0 END) AS "PC5",
    en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CASE	WHEN E.id = 1		THEN 1 Else 0 END  AS "PC1",
    CASE	WHEN E.id = 2		THEN 1 Else 0 END  AS "PC2",
    CASE	WHEN E.id = 3		THEN 1 Else 0 END  AS "PC3",
    CASE	WHEN E.id = 4		THEN 1 Else 0 END  AS "PC4",
    CASE	WHEN E.id = 5		THEN 1 Else 0 END  AS "PC5",
    Cordialement,
    Vandman

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vos jointures supplémentaires entraînent une modification des données.
    Il vaut mieux faire les comptages de manière unitaire avant de les regrouper.

  5. #5
    Membre actif

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 370
    Points : 251
    Points
    251
    Par défaut
    Résolu en même temps que la discutions suivante : Aide: présentation du résultat d'une requête

    Merci à Waldar

    Cordialement,

    Vandman

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Calculer une somme pour chaque ligne et colonne d'un tableau
    Par baggie dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/05/2010, 09h55
  2. faire une somme pour une période
    Par cdevl32 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 18/03/2008, 15h26
  3. Réponses: 4
    Dernier message: 09/02/2006, 15h20
  4. Probleme pour faire une somme sous Excel
    Par Nicolas92 dans le forum Excel
    Réponses: 5
    Dernier message: 02/12/2005, 11h38
  5. Probleme pour faire une somme dans header ??
    Par snoop57 dans le forum Access
    Réponses: 7
    Dernier message: 01/12/2005, 13h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo