sql access probleme de requete

sql access probleme de requete - SQL/NoSQL - Programmation

Marsh Posté le 03-04-2008 à 15:30:31    

voila j'ai une BD dans la quel je doit extraire tout les demandes de travail qui on un temps de traitement inferieur a 10 jours, compris entre 10 et 20 jours, 21 et 30 jours et supérieur a 30 sachant que dans les demandes de travail elles ont un niveau d'urgence a,c,p et r  
Donc dans le but de réduire les requêtes e d'éviter  dans créer 16 par mois de l'année j'ai fais ceci
 
SELECT FORMAT([DATE CLOTURE FT],"MM/AAAA" ) AS [ANNEE MOIS], COUNT(BASE.[TYPE D'IMPRIME]) AS [COMPTEDETYPE D'IMPRIME]
FROM BASE  
WHERE ((([DATE CLOTURE FT]-[DATE ARRIVEE])<10))
GROUP BY FORMAT([DATE CLOTURE FT],"MM/AAAA" ),BASE.[TYPE D'IMPRIME]
HAVING(((BASE.[TYPE D'IMPRIME]) LIKE "C" ));
 
 
Dans ma table je dispose en colonne de:
      -type d'imprime (a,p,c,r)
      -date arrivée  
      -date clôture
 
Donc avec ma requête j'obtiens bien toutes les demandes <10 jour pour c
Mais je n'arrive pas à afficher en même temps pour les autre demande r,p,a et pour les autres temps de traitement 10 et 20 jours, 21 et 30 jours et supérieur a 30  
 
Est il possible de créer une requête pour tout sa? (sachant que je ne suis pas très bon en macro)

Reply

Marsh Posté le 03-04-2008 à 15:30:31   

Reply

Marsh Posté le 03-04-2008 à 16:01:13    

Déjà tu peux éclater ton délai avec :

Code :
  1. SELECT blabla, CASE
  2. WHEN ([DATE CLOTURE FT]-[DATE ARRIVEE])<10 THEN "D < 10"
  3. WHEN ([DATE CLOTURE FT]-[DATE ARRIVEE])<20 THEN "11 < D < 20"
  4. WHEN ([DATE CLOTURE FT]-[DATE ARRIVEE])<30 THEN "21 < D < 30"
  5. ELSE " D >= 30"
  6. END AS délai
  7. FROM ....
 

et puis modifies ton HAVING en :

Code :
  1. HAVING(((BASE.[TYPE D'IMPRIME]) IN ("A", "P", "C", "R" ) ));
 

et normalement tu auras qqch de correct


Message édité par babasss le 03-04-2008 à 16:03:33

---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 03-04-2008 à 17:53:37    

SELECT Format([Date cloture FT],"yyyymm" ) AS [Année mois], Count(base.[type d'imprimé]) AS [CompteDetype d'imprimé], case
WHEN  ([date cloture FT]-[date arrivée]) <10 THEN "D < 10"
WHEN  ([date cloture FT]-[date arrivée]) <10 THEN "D < 10"
WHEN  ([date cloture FT]-[date arrivée]) <20 THEN "11 < D < 20"
WHEN  ([date cloture FT]-[date arrivée]) <30 THEN "21 < D < 30"
ELSE " D >= 30 "
end as délai
FROM base
GROUP BY Format([Date cloture FT],"yyyymm" ), base.[type d'imprimé]
HAVING (((base.[type d'imprimé]) in ("BNI-A","BNI-R",BNI-P","BNI-C" )));
 
 
j'ai donc fais la requête comme au dessu  
et j'obtien le message d'erreur suivant  
 
 
 erreur de syntaxe (operateur absent) dans l'expression 'case
 WHEN  ([date cloture FT]-[date arrivée]) <10 THEN "D < 10"
 WHEN  ([date cloture FT]-[date arrivée]) <10 THEN "D < 10"
 WHEN  ([date cloture FT]-[date arrivée]) <20 THEN "11 < D < 20"
 WHEN  ([date cloture FT]-[date arrivée]) <30 THEN "21 < D < 30"

Reply

Marsh Posté le 03-04-2008 à 18:21:41    

Effectivement... Il semblerait que M$ dans son grand soucis de compatibilité  :D  n'est pas implémenté le CASE WHEN dans Access. Cependant avec un switch on peut visiblement faire la même chose (valable uniquement sur Accesss)

Code :
  1. Switch(
  2. ([date cloture FT]-[date arrivée]) <10, "D < 10",
  3. ([date cloture FT]-[date arrivée]) <20, "11 < D < 20",
  4. ([date cloture FT]-[date arrivée]) <30, "21 < D < 30",
  5. ([date cloture FT]-[date arrivée]) >=30, "D >= 30"
  6. )
 

Plus d'info sur le switch : http://www.webcheatsheet.com/SQL/a [...] switch.php

Message cité 1 fois
Message édité par babasss le 03-04-2008 à 18:22:15

---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
Reply

Marsh Posté le 21-11-2008 à 09:09:31    

Merci pour l'astuce.
 
J'ai l'habitude de travailler sous SQL Server et l'erreur Access ne me parlait pas vraiment.
 
Gaetan
 
http://www.matelli.fr
 

babasss a écrit :

Effectivement... Il semblerait que M$ dans son grand soucis de compatibilité  :D  n'est pas implémenté le CASE WHEN dans Access. Cependant avec un switch on peut visiblement faire la même chose (valable uniquement sur Accesss)

Code :
  1. Switch(
  2. ([date cloture FT]-[date arrivée]) <10, "D < 10",
  3. ([date cloture FT]-[date arrivée]) <20, "11 < D < 20",
  4. ([date cloture FT]-[date arrivée]) <30, "21 < D < 30",
  5. ([date cloture FT]-[date arrivée]) >=30, "D >= 30"
  6. )


 
Plus d'info sur le switch : http://www.webcheatsheet.com/SQL/a [...] switch.php


Reply

Sujets relatifs:

Leave a Replay

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