JEANNE
-
Modifié par irongege le 10/11/2010 à 17:46
vdj -
26 mai 2016 à 08:03
Bonjour,
je souhaite sortir la semaine d'une date pour trier par année et semaine. Seulement en utilisant **format([DATE PRODUCTION];"yyyy/ww";2;3)**, j'obtiens 2010/9 .. 2010/20 etc. Je voudrais obtenir 2010/09 car en triant, 2010/20 se trouve avant 2010/9 de sorte que les semaines ne sont pas dans le bon ordre. Or la semaine 09 se classe avant la semaine 20 et la semaine 9 après la semaine 20. Avez-vous une idée pour me sortir de cet imbroglio. (donc deux chiffres impératifs pour la semaine)
Par avance merci.
Probablement un peu tard pour répondre, j'ai ajouté les lignes suivantes dans le code de la fonction semaine.
Si ça peut servir
If Semaine < 10 Then
Semaine = "0" & Semaine
Else
End If
SELECT Format([DATE PRODUCTION],"yyyy/ww",2,3) AS Semaine
FROM Tproductionbroyé
GROUP BY Format([DATE PRODUCTION],"yyyy/ww",2,3);
ma requête ne comporte qu'un champ : Semaine: Format([DATE PRODUCTION];"yyyy/ww";2;3) (mode SQL ci-dessus)
En fait, par la suite j'ai un formulaire basé sur la requête qui me permet de choisir dans une liste déroulante la semaine départ et dans une autre la semaine fin avec les stats correspondantes. Le problème c'est que la semaine 4 s'intercale entre la 39 et la 40 d'ou le fait que je veuille avoir 2010/04 et non 2010/4
La réponse est peut-être simple mais franchement je cale. En tout cas merci de d'intéresser à ma question.
blux
Messages postés25976Date d'inscriptiondimanche 26 août 2001StatutModérateurDernière intervention18 avril 20243 287 10 nov. 2010 à 13:26
Tu es sûre que tu as un GROUP BY, ça ne serait pas un ORDER BY ?
Je peux te proposer ça :
SELECT DATEPART([DATE PRODUCTION];"yyyy") & "/" & format("##",DATEPART([date production]);"ww") AS Semaine FROM Tproductionbroyé ORDER BY 1;
En supposant que date production est de type 'date'.
DATEPART est une fonction qui permet d'extraire des parties d'une date : jour, année, semaine, jour de la semaine...
En fait, j'ai besoin de choisir la semaine début et la semaine fin dans des listes déroulantes sur un formulaire. En cliquant sur la touche "voir les stats", je transfère les deux données dans une table de transition (modules puis évènements sur clic) et sur le formulaire suivant j'ai accès à toutes les stats pour la semaine du... à la semaine .... qui font référence aux données de la table de transition (donc plusieurs stats sans avoir à resaisir les dates). Mon problème est que si le format dans la table de transition n'est pas à "texte", j'ai un problème bloquant d'incompatibilité de données entre la date fabriquée normalement avec partdate et le format numérique ou date (tout essayé) de la table de transition (donc pas de transfert). Pas de problème en format texte mais le soucis est que 2010/4 se situe entre 2010/39 et 2010/40 donc impossible d'avoir les stats de la sem 39 à la sem 40 sans sem 4. Seule solution que j'ai trouvé pour avoir 2010/04 est une requête comme suit :
1) année: PartDate("yyyy";[DATE PRODUCTION])
2) Sem: VraiFaux(PartDate("ww";[DATE PRODUCTION];2;3)<10;0 & PartDate("ww";[DATE PRODUCTION];2;3);PartDate("ww";[DATE PRODUCTION];2;3))
3) période: [année] & "/" & [sem]
J'ai une 2ème requête qui regroupe les semaines pour la liste déroulante.
Toutes les stats hebdo sont basées sur des requêtes faites sur ce modèle et... ça marche avec classement dans le bon ordre même si ça fait un peu "bidouille".
En fait, je trouve la solution simple mais qu'est-ce que j'ai perdu comme temps et énergie pour arriver à ça...
blux
Messages postés25976Date d'inscriptiondimanche 26 août 2001StatutModérateurDernière intervention18 avril 20243 287 16 nov. 2010 à 11:44
As-tu regardé du côté de la fonction 'cdate' qui transforme une donnée en type date ?
pour à peu près le même problème j'ai fait comme suit (je n'ai pas besoin du /) :
SELECT Format(DateMesure,'yyyy')+Format(Format(DateMesure,'ww'),"00") AS Semaine
FROM MaTable
GROUP BY NumId, Format(DateMesure,'yyyy')+Format(Format(DateMesure,'ww'),"00")
ORDER BY ORDER BY Format(DateMesure,'yyyy')+Format(Format(DateMesure,'ww'),"00");