Requete SQL double résultat

Requete SQL double résultat - SQL/NoSQL - Programmation

Marsh Posté le 23-05-2012 à 17:20:43    

Salut, j’essaie d'écrire une requete qui permet de récupérer 2 résultats différent sur le même champs. Voila ma requete:
 

Code :
  1. SELECT count(cs.num_cheque) AS nbr_cheque
  2.          
  3.        FROM cheque_sport AS cs
  4.        WHERE cs.is_utilise = -1
  5.        AND date_facturation > DATE_ADD(now(), Interval -2 year)
  6.        GROUP BY YEAR(date_facturation), MONTH(date_facturation)
  7.        ORDER BY YEAR(date_facturation);


 
je voudrais avoir en même temps le résultat de la requete SELECT count(cs.num_cheque) AS cheque_vendu FROM cheque_sport AS cs WHERE cs.is_utilise = 0
 
C'est possible ou je dois obligatoirement faire 2 requetes?
 
merci
       

Reply

Marsh Posté le 23-05-2012 à 17:20:43   

Reply

Marsh Posté le 23-05-2012 à 17:29:40    

En une requête, ça se fait avec un UNION.
 
EDIT : après, suivant la consolidation que tu veux dans nbr_cheque, tu peux aussi faire dans le WHERE, un WHERE cs.is_utilise IN (0, -1) AND ...


Message édité par rufo le 23-05-2012 à 17:31:19

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 24-05-2012 à 09:37:59    

salut j'ai essayé avec union mais j'ai une erreur sql:
 

Code :
  1. SELECT count(cs.num_cheque) AS nbr_cheque, cs.montant_cheque, YEAR(date_facturation) AS annee, MONTH(date_facturation) AS mois  , SUM(CASE WHEN id_cheque_sport_statut = 2 THEN 1 ELSE 0 END ) as nb_vendu
  2.          
  3.        FROM cheque_sport AS cs
  4.        WHERE cs.is_utilise = -1
  5.         AND date_facturation > DATE_ADD(now(), Interval -2 year)
  6.     UNION
  7. SELECT count(cs.num_cheque) AS cheque_vendu, cs.montant_cheque, YEAR(date_facturation) AS annee, MONTH(date_facturation) AS mois  , SUM(CASE WHEN id_cheque_sport_statut = 2 THEN 1 ELSE 0 END ) as nb_vendu
  8.                                         FROM cheque_sport AS cs
  9.                                         WHERE date_facturation > DATE_ADD(now(), Interval -2 year)
  10.                                         GROUP BY YEAR(date_facturation), MONTH(date_facturation)
  11.                                         ORDER BY YEAR(date_facturation);


 
Elle fonctionne sans le group et le orderby mais pas avec. Comment faire? merci

Reply

Marsh Posté le 24-05-2012 à 09:45:31    

Il me semble que le select de chaque union doit avoir les mêmes champs. Et le group by je l'aurais fait sur chaque requête...


Message édité par rufo le 24-05-2012 à 09:46:54

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 24-05-2012 à 09:48:19    

tu veux dire que que meme l'alias doit etre identique?  
Comment j'appelle le resultat de ma seconde requete si c'est le meme champ?

Reply

Marsh Posté le 24-05-2012 à 10:54:35    

http://dev.mysql.com/doc/refman/5.0/fr/union.html
 
En fait, les noms des colonnes peuvent être de noms différents mais doivent être du même type et de toute manière, c'est le nom des colonnes du premier select qui vont être utilisé pour le retour du résultat. Pour différencier les résultats, tu peux rajouter un colonne dans chaque select où tu metx une constante, genre "1" pour le premier select et "2" pour le second ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

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