Bonjour,
J'utilise une base SQL Server et à partir de la requête (un peu plus bas) je souhaite obtenir le résultat suivant
	citroen      320
  peugeot      160
  renault      NULL  | 
au lieu de  
citroen      320
  peugeot      60
  peugeot      100
  renault      NULL  | 
Voici la requête que j'utilise. J'aurai pensé que le GROUP BY aurait agrégé les marques, mais cela ne semble pas vouloir être le cas. Si j'utilise le sum(), j'ai un comportement assez étrange qui double mes montants plutôt que de les additionner... Si jamais vous avez une réponse, à ce problème je suis preneur. Merci beaucoup. Voir solution au bas du post
Code :
 - SELECT
 -   case when f1.marque is Null then f2.marque else f1.marque end as marq,
 -   f2.total_vente
 - FROM
 -   (SELECT * FROM voiture) f1
 - FULL OUTER JOIN
 -   (SELECT marque, montant * quantite AS total_vente FROM vente GROUP BY marque, montant, quantite) f2
 - ON
 -   f1.marque = f2.marque
 - GROUP BY f2.marque, f1.marque, f2.total_vente
 - ORDER BY marq
 
  | 
- Table vente
   MARQUE     MODELE     MONTANT    QUANTITE
  citroen    Xantia     40        	8
  peugeot    307        50        	2
  peugeot    408        60          1  | 
- Table voiture
   MARQUE      MODELE      ANNEE
  peugeot    307        2008
  citroen    Xantia    	1990
  citroen    Picasso    2008
  renault    espace    	2002
  renault    R21        1990
  peugeot    408        2009  | 
 
 
Résolution :
 
Code :
 - SELECT
 -   case when f1.marque is Null then f2.marque else f1.marque end as marq,
 -   f2.total_vente
 - FROM
 -   (SELECT * FROM voiture) f1
 - FULL OUTER JOIN
 -   (SELECT marque, sum(montant * quantite) AS total_vente FROM vente GROUP BY marque) f2
 - ON
 -   f1.marque = f2.marque
 - GROUP BY f1.marque, f2.marque, f2.total_vente
 
  | 
 
Message édité par mi_boulet-mi_shemale le 11-07-2008 à 04:31:32