patricevernier
Messages postés6Date d'inscriptionlundi 16 novembre 2009StatutMembreDernière intervention29 octobre 2010
-
29 oct. 2010 à 17:05
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 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 )
gorgonite
Messages postés14Date d'inscriptionmercredi 28 juillet 2004StatutMembreDernière intervention17 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
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 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.