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

Langage SQL Discussion :

distinct sur 2 colonnes et sum sur group by


Sujet :

Langage SQL

  1. #1
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 244
    Points : 200
    Points
    200
    Par défaut distinct sur 2 colonnes et sum sur group by
    Bonjour,

    J'aurais besoin de votre aide car mon sql n'est pas assez poussé pour faire ce que l'on me demande.

    J'ai une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    COL1  AMO1  COL2  AMO2
    123     20      345    70
    345     70      123    20
    689     40      345    70
    123     20      576    30
    J'aurais besoin de pouvoir effectuer une sorte de groupe by avec les colonnes COL1 et COL2.

    Les contraintes sont telles que:
    Je ne peux pas changer la structure de ma table ni créer une table temporaire.

    Le résultat attendu est
    [valeur distinct de col1 et col2 ensemble] --> [sum[amo1 et amo2] du group by]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    123 --> 60
    345 --> 210
    689 --> 40
    576 --> 30
    J'avais commencé ceci mais je bloque à cause des doubles colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select col1,sum(amo1)
        from table
        group by col1;

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Faites un UNION ALL avant d'effectuer votre agrégat.

  3. #3
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 244
    Points : 200
    Points
    200
    Par défaut
    Je viens de faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select identifiant, sum(amo1)+sum(amo2)
    	from table
    	group by (
    		select col1 as identifiant
    		from table
    		group by col1  
    		UNION
    		select col2 as identifiant
    		from table
    		group by col2
    		);
    Mais alors j'ai un problème avec le group by.
    J'ai renommé mon résultat en 'identifiant' dans la sous requête.
    Mais il ne reconnaît pas identifiant dans la requeête principale.

    Comment puis-je lui dire que mon identifant c'est soit col1 soit col2?

    Le résultat de ma sous-requête me donne le bons identifiants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                                                 identifiant
                                                  ----------
                                                       123
                                                       345
                                                       576
                                                       689
    Il ne me reste plus qu'a trouver les bonnes références à faire passer...

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Voilà, c'est l'idée mais la syntaxe ça ne va pas du tout !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      SELECT sr.identifiant, sum(sr.montant)
        FROM (SELECT col1 AS identifiant, AMO1 as montant
                FROM TABLE
               UNION ALL -- important le ALL 
              SELECT col2               , AMO2
                FROM TABLE) sr
    GROUP BY sr.identifiant;

  5. #5
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 244
    Points : 200
    Points
    200
    Par défaut
    Génial!

    (Effectivemment mon SQL est un peu rouillé)

    Merci beaucoup!


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

Discussions similaires

  1. Filtrer sur une colonne de type personne / groupe
    Par ITParty dans le forum InfoPath
    Réponses: 3
    Dernier message: 29/06/2014, 22h17
  2. SUM sur une colonne FLOAT
    Par faya972 dans le forum Requêtes
    Réponses: 1
    Dernier message: 21/04/2011, 19h34
  3. Réponses: 1
    Dernier message: 03/10/2008, 13h29
  4. Requete SUM sur une table avec critère sur une autre
    Par wail00 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/05/2007, 16h58
  5. [VBA-E] Minimum d'une colonne avec condition sur autre colonne
    Par Currahee dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2007, 17h01

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