Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/11/2010, 17h05   #1
Membre habitué
 
Homme
Consultant informatique
Inscription : mars 2002
Messages : 211
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2002
Messages : 211
Points : 133
Points : 133
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 :
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 :
1
2
3
4
123 --> 60
345 --> 210
689 --> 40
576 --> 30
J'avais commencé ceci mais je bloque à cause des doubles colonnes
Code :
1
2
3
SELECT col1,sum(amo1)
    FROM TABLE
    GROUP BY col1;
L0007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 17h22   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 680
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 680
Points : 10 468
Points : 10 468
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Faites un UNION ALL avant d'effectuer votre agrégat.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 17h45   #3
Membre habitué
 
Homme
Consultant informatique
Inscription : mars 2002
Messages : 211
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2002
Messages : 211
Points : 133
Points : 133
Je viens de faire ceci:
Code :
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 :
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...
L0007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2010, 18h26   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 680
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 680
Points : 10 468
Points : 10 468
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Voilà, c'est l'idée mais la syntaxe ça ne va pas du tout !
Code :
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;
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 09h23   #5
Membre habitué
 
Homme
Consultant informatique
Inscription : mars 2002
Messages : 211
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2002
Messages : 211
Points : 133
Points : 133
Génial!

(Effectivemment mon SQL est un peu rouillé)

Merci beaucoup!

L0007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h52.


 
 
 
 
Partenaires

Hébergement Web