Lier plusieurs requêtes SQL

Lier plusieurs requêtes SQL - SQL/NoSQL - Programmation

Marsh Posté le 04-09-2013 à 11:08:15    

Bonjour à tous,
 
Je viens juste de commencer le SQL et j'ai un peu de mal. Mon problème est le suivant:
 
Je souhaite afficher mes résultat de la manière suivante:
 
Année   Interventions curatives   Interventions préventives   Interventions totales
 2013                 100                                 135                         235
 
Mais je n'arrive pas à tout regrouper dans une seule requête, donc j'obtient ceci:
 
Requete1:                                Requête 2:                                 Requête 3:
Année   Interventions curatives   Année   Interventions préventives   Année   Interventions totales
2013                  100                 2013                   135                  2013                  235
 
Pour faire cela, j'utilise donc 3 requêtes:
 
SELECT substring(B_FT1996.date,1,4) AS 'Année', Count(*)
FROM AssetPlus.dbo.B_FT1996 B_FT1996
WHERE  (B_FT1996.CADRE='interv_cur')
GROUP BY substring(B_FT1996.date,1,4)
ORDER BY substring(B_FT1996.date,1,4)
 
SELECT substring(B_FT1996.date,1,4) AS 'Année', Count(*)
FROM AssetPlus.dbo.B_FT1996 B_FT1996
WHERE  (B_FT1996.CADRE='interv_prev')
GROUP BY substring(B_FT1996.date,1,4)
ORDER BY substring(B_FT1996.date,1,4)
 
SELECT substring(B_FT1996.date,1,4) AS 'Année', Count(*)
FROM AssetPlus.dbo.B_FT1996 B_FT1996
WHERE  (B_FT1996.CADRE='interv_tot')
GROUP BY substring(B_FT1996.date,1,4)
ORDER BY substring(B_FT1996.date,1,4)
 
Je précise que B_FT1996.date est de la forme 2013-04-02
 
Je pense que mon problème est enfantin, mais j'ai vraiment besoin d'aide  
 
Merci d'avance

Reply

Marsh Posté le 04-09-2013 à 11:08:15   

Reply

Marsh Posté le 04-09-2013 à 11:49:25    

Je dirais comme ça de faire un UNION entre les 3 requêtes.


---------------
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 04-09-2013 à 11:52:42    

c'est a quoi j'ai pensé aussi mais l'UNION ne veut pas s’exécuter avec ma fonction d’agrégation..

Reply

Marsh Posté le 04-09-2013 à 12:07:29    

Fait ton GROUP BY et ton ORDER BY sur "Année". Pour le COUNT(), fait le sur un ID et non sur "*" (c'est très crade :o ) et met un AS après avec le même nom dans chacune des 3 requêtes... Ca devrait passer.
 
Il faut que le contenu des 3 select soit identique en terme de champs et types de données.
 
Par contre, t'auras qu'un seul ORDER BY pour les 3 requêtes (à mettre sur la dernière).


---------------
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 04-09-2013 à 12:25:36    

J'ai une erreur qui me dis que la clause SELECT ne doit pas être suivie de 'interv_cur'

Reply

Marsh Posté le 04-09-2013 à 13:21:35    

Normalement, tu dois avoir un truc du genre
SELECT ... FROM .... WHERE ... GROUP BY ... UNION SELECT ... FROM .... WHERE ... GROUP BY ... UNION SELECT ... FROM .... WHERE ... GROUP BY ... ORDER BY ...


---------------
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 04-09-2013 à 13:40:29    

Exactement mais ça ne marche pas...Il n'aime définitivement pas le substring
 
*EDIT: j'ai fermé et relancé le programme et l'erreur a disparu...je regarde si j'arrive à obtenir ce que je veux


Message édité par Ledin le 04-09-2013 à 13:50:27
Reply

Marsh Posté le 04-09-2013 à 13:54:17    

Parfait ça marche, merci beaucoup pour ton aide rapide et concise rufo

Reply

Marsh Posté le 05-09-2013 à 08:50:44    

Ya moyen aussi de tout faire en une seule query (sans les union je veux dire):

Code :
  1. SELECT substring(B_FT1996.date,1,4) AS 'Année'
  2.      , SUM(CASE WHEN B_FT1996.CADRE='interv_cur' THEN 1 ELSE 0 END) 'Interventions curatives'
  3.      , SUM(CASE WHEN B_FT1996.CADRE='interv_prev' THEN 1 ELSE 0 END) 'Interventions préventives'
  4.      , SUM(CASE WHEN B_FT1996.CADRE='interv_tot' THEN 1 ELSE 0 END) 'Interventions totales'
  5. FROM AssetPlus.dbo.B_FT1996 B_FT1996
  6. GROUP BY substring(B_FT1996.date,1,4)
  7. ORDER BY substring(B_FT1996.date,1,4)

Reply

Sujets relatifs:

Leave a Replay

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