[résolu]Jointure externe et GROUP BY

Jointure externe et GROUP BY [résolu] - SQL/NoSQL - Programmation

Marsh Posté le 11-07-2008 à 04:15:33    

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 :
  1. SELECT
  2.   case when f1.marque is Null then f2.marque else f1.marque end as marq,
  3.   f2.total_vente
  4. FROM
  5.   (SELECT * FROM voiture) f1
  6. FULL OUTER JOIN
  7.   (SELECT marque, montant * quantite AS total_vente FROM vente GROUP BY marque, montant, quantite) f2
  8. ON
  9.   f1.marque = f2.marque
  10. GROUP BY f2.marque, f1.marque, f2.total_vente
  11. 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 :
  1. SELECT
  2.   case when f1.marque is Null then f2.marque else f1.marque end as marq,
  3.   f2.total_vente
  4. FROM
  5.   (SELECT * FROM voiture) f1
  6. FULL OUTER JOIN
  7.   (SELECT marque, sum(montant * quantite) AS total_vente FROM vente GROUP BY marque) f2
  8. ON
  9.   f1.marque = f2.marque
  10. GROUP BY f1.marque, f2.marque, f2.total_vente


Message édité par mi_boulet-mi_shemale le 11-07-2008 à 04:31:32
Reply

Marsh Posté le 11-07-2008 à 04:15:33   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed