Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1573 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL]Problème requête simple: jointure externe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL]Problème requête simple: jointure externe

n°1741627
teks9
8 ça suffit
Posté le 05-06-2008 à 09:01:43  profilanswer
 

Salut les gars, je suis un pauvre fonctionnel qui essaie de faire des rapports SQL et ma connaissance en SQL est limitée.
Je vous explique le problème:
 
J'ai une table A avec une liste de région (champ CODE)
J'ai une table B avec des montants en cours, et chaque ligne porte un code région, donc on peut simplifier en disant que la table porte (CODE, EN_COURS) comme champ
J'ai une table C avec des montants facturés, et chaque ligne porte aussi un code région: (CODE, FACT)
Une région peut avoir 0 à n lignes dans la table B, et 0 à n lignes dans la table C.
 
Mon but est d'obtenir la liste des régions avec une colonne portant la somme des en cours sur la région, et une autre portant la somme des facturés sur la région
 
Je suis donc parti de ma table A, puis jointure externe sur les tables B et C, group by(A.CODE) et sum(B.EN_COURS) et sum(C.FACT).
 
Ma premirèe colonne me donne un résultat correct, mais la deuxième me donne un résultat muliplié par le nombre de lignes de la première partie de ma requête: problème typique de jointure.
 
J'espère que vous pourrez me dépanner, car la je sèche.
 
Merci  :jap:

mood
Publicité
Posté le 05-06-2008 à 09:01:43  profilanswer
 

n°1741899
olivthill
Posté le 05-06-2008 à 13:36:12  profilanswer
 

Avec quel type de base de données (Oracle, Access, MySQL, SL server, Sybase, ...) ?
La syntaxe varie d'une base à l'autre quand on veut faire des choses un tout petit peu compliquées.
 
Comme vous avez deux sum à faire sur des tables pouvant avoir des cardinalités différentes (on peut avoir FACT sans ENCOURS ou l'inverse (peut-être uniquement dans des cas exceptionnels), si j'ai bien compris), il faudrait faire deux requêtes séparées, qui seront éventuellement réunies en une seule.
 
Par exemple, on pourrait tenter :

Select A.CODE,
       (select sum(B.ENCOURS) from B where B.CODE = A.CODE group by B.CODE),
       (select sum(C.FACT)    from C where C.CODE = A.CODE group by C.CODE)
from A


Message édité par olivthill le 05-06-2008 à 13:37:40
n°1741995
teks9
8 ça suffit
Posté le 05-06-2008 à 15:22:23  profilanswer
 

Je suis en fait sur SQL server.
J'ai réussi à avoir ce que je voulais grace à la commande UNION ALL, assez pratique, mais je vais essayer votre proposition :)

n°1744446
HappyHarry
Posté le 10-06-2008 à 22:02:44  profilanswer
 

j'aurais fait ca avec un union all aussi pour le coup, genre
 
select code, sum(encours), sum(fact)
from (
select code, 0 as encours, 0 as fact
from A
union all
select code, encours, 0
from B
union all
select code, 0, fact) T
group by code


Message édité par HappyHarry le 10-06-2008 à 22:02:58
n°1744479
teks9
8 ça suffit
Posté le 10-06-2008 à 23:35:59  profilanswer
 

on peut enchainer les union all?ou faut il les imbriquers les uns dans les autres?

n°1744483
HappyHarry
Posté le 10-06-2008 à 23:55:08  profilanswer
 

tu peux les enchainer tant que tu veux

n°1744630
teks9
8 ça suffit
Posté le 11-06-2008 à 11:29:00  profilanswer
 

ok merci :)

n°1744979
MagicBuzz
Posté le 11-06-2008 à 17:50:36  profilanswer
 

vous avez rien trouvé de plus dégueux comme solutions ? :o

n°1745030
teks9
8 ça suffit
Posté le 11-06-2008 à 19:08:40  profilanswer
 

tu proposes quoi? [:cosmoschtroumpf]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL]Problème requête simple: jointure externe

 

Sujets relatifs
Accés externe Mysql avec base et vista[résolu] Problème installation PHP5
Problème de format de date SQLGROS probleme linéaire dans CPLEX
Pblm de jointure externe avec plus de 2 tablesaccess requête sur liste déroulante avec dates
Probleme bouton importer dans swf principale 
Plus de sujets relatifs à : [SQL]Problème requête simple: jointure externe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR