Problème requête simple: jointure externe [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 05-06-2008 à 13:36:12
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, |
Marsh Posté le 05-06-2008 à 15:22:23
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
Marsh Posté le 10-06-2008 à 22:02:44
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
Marsh Posté le 10-06-2008 à 23:35:59
on peut enchainer les union all?ou faut il les imbriquers les uns dans les autres?
Marsh Posté le 05-06-2008 à 09:01:43
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