Double requête à faire en UNE

patricevernier Messages postés 6 Date d'inscription lundi 16 novembre 2009 Statut Membre Dernière intervention 29 octobre 2010 - 29 oct. 2010 à 17:05
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 - 20 nov. 2010 à 19:32
Bonjour et merci pour votre aide.

J'ai deux requêtes que j'ai construit et qui fonctionne. En gros j'ai des données

num_affaire, montant_lots,date_enreg_affaire,...

Ma 1ère requête me donne une liste des affaires avec somme des montants des lots pour les années de 2000 à 2011

Ma 2ème requête me donne une liste des affaires avec montant somme des montants des lots pour l'année 2010

Je veux obtenir sur une même feuille la liste de 2010 avec les montants correspondants par numéro d'affaire totaux (de 2000 à 2011).
J'explique une affaire A0021 débute en 2008: 3 lots sont créés pour 15000 puis en 2009 2 lots pour 5000 euros enfin en 2010 6 lots pour 50000

Ma 1ère requête affiche
Num_aff Nombre lots Montant aff
A0021 (3+2+6)=11 (15000+5000+50000)=70000

Ma 2ème requête
Num_aff Nombre lots Montant aff
A0021 6 50000

Je veux obtenir sur une ligne en 1 requête
Num_aff Nombre lots 2010 Montant aff 2010 Nombre lots tot (2000-2011) Montant aff tot (2000-2011)
A0021 6 50000 11 70000

J'ai essayé de mettre 1 après l'autre avec UNION au milieu mais cela ne marche pas.
Je ne sais pas faire. MERCI DE M'AIDER

SELECT A.num_affaire, COUNT(L.num_lot) AS Lots, COUNT(L.date_commande) AS Nbrecommandes, SUM(L.montant_commande) AS Montant FROM affaires A LEFT OUTER JOIN lots L ON A.num_affaire=L.num_affaire WHERE A.date_enreg >= '01/01/2000' AND A.date_enreg < '01/01/2011' GROUP BY A.num_affaire ORDER BY A.num_affaire UNION (SELECT A.num_affaire, COUNT(L.num_lot) AS Lots, COUNT(L.date_commande) AS Nbrecommandes, SUM(L.montant_commande) AS Montant FROM affaires A LEFT OUTER JOIN lots L ON A.num_affaire=L.num_affaire WHERE A.date_enreg >= '01/01/2009' AND A.date_enreg < '01/01/2011' GROUP BY A.num_affaire )

MERCI

3 réponses

gorgonite Messages postés 14 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 17 novembre 2010
13 nov. 2010 à 21:04
le parenthèsage des deux select peut-être ?

(select ... ) union (select ... )


sinon il y a toujours les procédures pour afficher quelque chose de plus logique dans une table du style
num_affaire lots_hist nb_command_hist montant_hist lots_current nb_command_current montant_current
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
20 nov. 2010 à 19:19
Bonsoir

Quand tu dis
J'ai essayé de mettre 1 après l'autre avec UNION au milieu mais cela ne marche pas.

peux-tu être plus précis ?

Bob.
0
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
20 nov. 2010 à 19:32
Re
je viens de faire un petit test,
-enleve le ORDER BY de la premiere requete, sur une union les clauses ORDER BY doivent se trouver apres l'union.

par ailleurs, tes requetes se superposant, le moteur va filtrer les retours pour eviter les doublons,
donc si tu veux obtenir des lignes dupliquées pour les années 2009-20010 (tu as mis 2011 dans ta 2eme clause where)
il faut que tu utilises UNION ALL, et là le moteur ne filtrera plus les retours.

Bob.
0
Rejoignez-nous