Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1087 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Lier plusieurs requêtes SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Lier plusieurs requêtes SQL

n°2201707
Ledin
Posté le 04-09-2013 à 11:08:15  profilanswer
 

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

mood
Publicité
Posté le 04-09-2013 à 11:08:15  profilanswer
 

n°2201717
rufo
Pas me confondre avec Lycos!
Posté le 04-09-2013 à 11:49:25  profilanswer
 

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
n°2201719
Ledin
Posté le 04-09-2013 à 11:52:42  profilanswer
 

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

n°2201720
rufo
Pas me confondre avec Lycos!
Posté le 04-09-2013 à 12:07:29  profilanswer
 

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
n°2201722
Ledin
Posté le 04-09-2013 à 12:25:36  profilanswer
 

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

n°2201731
rufo
Pas me confondre avec Lycos!
Posté le 04-09-2013 à 13:21:35  profilanswer
 

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
n°2201735
Ledin
Posté le 04-09-2013 à 13:40:29  profilanswer
 

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
n°2201737
Ledin
Posté le 04-09-2013 à 13:54:17  profilanswer
 

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

n°2201841
Oliiii
Posté le 05-09-2013 à 08:50:44  profilanswer
 

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)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Lier plusieurs requêtes SQL

 

Sujets relatifs
[MYSQL] Mes requêtes en file d'attente[C/C++] Cherche fun en prog à plusieurs (social coding)
Etirer la formule de plusieurs lignes jusqu'en bas de mon tableauTester execution d'une requete SQL
[ACCESS] Problème infinité des même résultats d'une Requêtes[ACCESS] Fusion de 2 requêtes SQL
SQL 3 tables récupérer des informations en fonction d'une variableROWTYPE en PL/SQL impossible à créer sous SqlDeveloper
[Résolu][PHP / SQL] Automatique +++ Affichage 
Plus de sujets relatifs à : Lier plusieurs requêtes SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR