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 09/06/2011, 10h42   #1
Nouveau Membre du Club
 
nob hurf
Inscription : mars 2010
Messages : 86
Détails du profil
Informations personnelles :
Nom : nob hurf
Âge : 24
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2010
Messages : 86
Points : 36
Points : 36
Par défaut Jointure SQL et SUM

Bonjour,

J'ai un petit problème dans une requête SQL, très simple à faire en PL/SQL.

Mais je préfèrerais ne pas avoir à passer par une procédure et exécuter seulement une requête "directe" de SQL.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
SELECT 
       a.id,
       sum(a.montant) AS mtt_ttl_a,
       sum(b.montant) AS mtt_ttl_b
FROM
  table_A a, 
  table_B b,
WHERE
  a.id = b.id
GROUP BY
  a.id
Le problème étant qu'il me multiplie la somme par le nombre de ligne qu'il parcourt.

Par exemple si a.montant = 1 et b.montant = 1, il va me marquer en sortie
la somme multipliée par le nombre de ligne qu'il a parcouru ....

Merci d'avance pour les explications
bruno_nono est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 10h47   #2
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Bonjour,

Prenez l'habitude d'écrire vos jointures de manière normalisée (syntaxe INNER JOIN... ON... plutôt qu'en séparant les tables par des virgules).
Sinon, le résultat renvoyé est logique, compte tenu de la jointure.
La question est donc : que souhaitez-vous exactement comme résultat ?
Peut-on avoir un exemple du contenu des tables, et le résultat attendu en sortie de requête ?
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 10h55   #3
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
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 684
Points : 10 434
Points : 10 434
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
À mon avis vous voulez faire ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
WITH TA AS
(
  SELECT id, sum(montant) AS mtt_ttl_a
    FROM table_A
GROUP BY id
)
  ,  TB AS
(
  SELECT id, sum(montant) AS mtt_ttl_b
    FROM table_B
GROUP BY id
)
SELECT TA.id
     , TA.mtt_ttl_a
     , TB.mtt_ttl_b
  FROM TA
       INNER JOIN TB
         ON TB.id = TA.id;
Si vous avez des données qui existent dans une table et pas dans l'autre, il faut joindre différemment :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
WITH TA AS
(
  SELECT id, sum(montant) AS mtt_ttl_a
    FROM table_A
GROUP BY id
)
  ,  TB AS
(
  SELECT id, sum(montant) AS mtt_ttl_b
    FROM table_B
GROUP BY id
)
SELECT coalesce(TA.id, TB.id) AS id
     , coalesce(TA.mtt_ttl_a, 0) AS mtt_ttl_a
     , coalesce(TB.mtt_ttl_b, 0) AS mtt_ttl_b
  FROM TA
       FULL OUTER JOIN TB
         ON TB.id = TA.id;
__________________
Email : http://scr.im/waldar
Waldar est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 09/06/2011, 11h29   #4
Nouveau Membre du Club
 
nob hurf
Inscription : mars 2010
Messages : 86
Détails du profil
Informations personnelles :
Nom : nob hurf
Âge : 24
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2010
Messages : 86
Points : 36
Points : 36
Merci c'est exactement le résultat de ce que j'attends avec la première requête SQL.

Je pensais que la requête "serait" plus simple, étant débutant... je vais maintenant chercher à la comprendre !

Merci beaucoup

(déjà je ne connaissais pas du tout le "with" et ce genre de syntaxe...de même pour le inner join... jamais vu on m'a toujours appris des jointures avec les virgules en cours d'ingé...!
bruno_nono 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 15h48.


 
 
 
 
Partenaires

Hébergement Web