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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Simplification de requête

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Simplification de requête

n°1921271
hoppus666d​tc
Gigateuf Wayne ! Megateuf Gart
Posté le 04-09-2009 à 13:54:59  profilanswer
 

Bonjour,
 
voici un requête faites sous Access :
 

Citation :

SELECT employe, Date,  
(SELECT Sum(ValeurCalculee) FROM StatCalc a WHERE ID_Cpt In (9,12) AND a.Employe = s.employe  AND a.Date = s.Date ) AS Cpt1,  
(SELECT ValeurCalculee FROM StatCalc b WHERE ID_Cpt =10 AND b.Employe = s.employe  AND b.Date = s.Date ) AS Cpt2,  
(SELECT ValeurCalculee FROM StatCalc c WHERE ID_Cpt =11 AND c.Employe = s.employe AND c.Date = s.Date  ) AS Cpt3,
(SELECT ValeurCalculee FROM StatCalc d WHERE ID_Cpt =7 AND d.Employe = s.employe AND d.Date = s.Date ) AS Cpt4,  
(SELECT ValeurCalculee FROM StatCalc e WHERE ID_Cpt =51 AND e.Employe = s.employe  AND e.Date = s.Date ) AS Cpt5,
(SELECT ValeurCalculee FROM StatCalc f WHERE ID_Cpt =46 AND f.Employe = s.employe  AND f.Date = s.Date ) AS Cpt6,  
(SELECT ValeurCalculee FROM StatCalc g WHERE ID_Cpt =14 AND g.Employe = s.employe  AND g.Date = s.Date ) AS Cpt7,
(SELECT ValeurCalculee FROM StatCalc h WHERE ID_Cpt =47 AND h.Employe = s.employe  AND h.Date = s.Date ) AS Cpt8,  
(SELECT ValeurCalculee FROM StatCalc i WHERE ID_Cpt =53 AND i.Employe = s.employe AND i.Date = s.Date  ) AS Cpt9,  
(SELECT ValeurCalculee FROM StatCalc j WHERE ID_Cpt =16 AND j.Employe = s.employe  AND j.Date = s.Date ) AS Cpt10
FROM StatCalc AS s
WHERE employe In (1,248)
GROUP BY Employe,Date;


 
Elle est assez simple à comprendre. On a une table StatCalc, composée de 4 champs (Employe, Date, Compteur, Valeur), qui donne une valeur a un compteur pour une date et un employé donnés.
Mon but est donc de choisir 10 compteurs et de faire une requete qui donne le tout en ligne.
 
Cette requête est super longue, auriez vous un moyen de diminuer tout ça svp ?

mood
Publicité
Posté le 04-09-2009 à 13:54:59  profilanswer
 

n°1921765
hoppus666d​tc
Gigateuf Wayne ! Megateuf Gart
Posté le 07-09-2009 à 09:26:05  profilanswer
 

Visiblement ça ne plait pas ^^

n°1922050
mrbebert
Posté le 07-09-2009 à 23:05:02  profilanswer
 

Si tu souhaites rassembler les résultats de plusieurs lignes sur une seule, ca ne va pas être facile en SQL standard. Faudrait voir s'il existe un équivalent en Access de la fonction GROUP_CONCAT de MySQL [:figti]

n°1922239
hoppus666d​tc
Gigateuf Wayne ! Megateuf Gart
Posté le 08-09-2009 à 16:14:26  profilanswer
 

Merci pour ta réponse.
 
Je n'ai jamais trouvé cet équivalent :(
Et Access ne permet pas de faire des curseurs (ou alors il me le cache bien :()

n°1924209
cezium
Posté le 15-09-2009 à 13:41:59  profilanswer
 

Code :
  1. SELECT employe, Date,
  2. sum(case ID_Cpt when 9 then value when 12 then value else 0 end) as cpt1
  3. sum(case ID_Cpt when 10 then value else 0 end) as cpt2
  4. sum(case ID_Cpt when 11 then value else 0 end) as cpt3
  5. sum(case ID_Cpt when 7 then value else 0 end) as cpt4
  6. sum(case ID_Cpt when 51 then value else 0 end) as cpt5
  7. sum(case ID_Cpt when 46 then value else 0 end) as cpt6
  8. sum(case ID_Cpt when 14 then value else 0 end) as cpt7
  9. sum(case ID_Cpt when 47 then value else 0 end) as cpt8
  10. sum(case ID_Cpt when 53 then value else 0 end) as cpt9
  11. sum(case ID_Cpt when 16 then value else 0 end) as cpt10
  12. FROM StatCalc
  13. WHERE employe In (1,248)
  14. group by Employe,Date
 

Comme çà ?

 

Edit : Apparemment Access ne connait pas le "case when" (no comment), il faut donc remplacer par des IIF(expression,vrai,faux)
Donc comme çà :

Code :
  1. SELECT employe, Date,
  2. sum(IIF(ID_Cpt=9,value,IIF(ID_Cpt=12,value,0))) as cpt1
  3. sum(IIF(ID_Cpt=10,value,0)) as cpt2
  4. sum(IIF(ID_Cpt=11,value,0)) as cpt3
  5. sum(IIF(ID_Cpt=7,value,0)) as cpt4
  6. sum(IIF(ID_Cpt=51,value,0)) as cpt5
  7. sum(IIF(ID_Cpt=46,value,0)) as cpt6
  8. sum(IIF(ID_Cpt=14,value,0)) as cpt7
  9. sum(IIF(ID_Cpt=47,value,0)) as cpt8
  10. sum(IIF(ID_Cpt=53,value,0)) as cpt9
  11. sum(IIF(ID_Cpt=16,value,0)) as cpt10
  12. FROM StatCalc
  13. WHERE employe In (1,248)
  14. group by Employe,Date
 

Je n'ai pas testé, je n'ai pas de base Access sous la main (et je n'en veux pas ;) )


Message édité par cezium le 15-09-2009 à 14:06:36
n°1924279
hoppus666d​tc
Gigateuf Wayne ! Megateuf Gart
Posté le 15-09-2009 à 16:23:04  profilanswer
 

J'ai juste du rajouter les virgules à la fin de chaque sum mais ça a l'air nickel ! Le temps de finir les derniers tests, mais pour l'instant c'est plus que concluant :)
 
MERCI !


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

  Simplification de requête

 

Sujets relatifs
Requete dans une boucle, danger ?Requete pour faire un classement : lenteur !
[sql] Requete MaxPb execution de requete sur site en php
Executer une requête avec DBExplorer32 ?Jointure vers sous-requête
Requête SQlSous-requête et recherche boolean
[Résolu]?? Simplification d'une requete ??? 
Plus de sujets relatifs à : Simplification de requête


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