{Access} La date et le jour de la semaine

Fermé
Burgerdash - 9 janv. 2010 à 12:32
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 - 13 janv. 2010 à 20:04
Bonjour,
j'ai déjà fait appel à votre aide dans ce thread (https://forums.commentcamarche.net/forum/affich-16037923-access-tri-de-doublons Ayant un peu progressé, je suis confronté à de nouveaux ennuis, et je me suis dit qu'il valait mieux créer une nouveau thread car le problème n'est pas le même. Aurais-je du poster à la suite ?

J'ai dans ma base de données Access 2003 un champ "Date" où je saisis une date dans le format jj/mm/aaaa, et où elle apparaît ensuite sous le format "Nomdujour jj mois aaaa". Par nom du jour, j'entends lundi, mardi, mercredi... Impeccable, j'ai justement besoin de savoir combien de clients sont venus des lundis, combien des mardis, combien des mercredis... Malheureusement, le nom du jour s'affiche à l'écran sans être utilisable par la base de données ! En effet, je ne peux classer mes données dans une requête que par ordre bêtement chronologique, mais non les rassembler par jour de la semaine. Je ne sais pas si je suis vraiment clair. Dans le doute, rien ne vaut un bon exemple. Voici ce que je saisis dans ma table :

Clients | Date d'achat
Client 1 | 07/01/10
Client 2 | 08/01/10
Client 3 | 14/01/10
Client 4 | 16/01/10
Client 5 | 16/01/10

Voici ce qui s'affiche quand mon curseur sort du champ "Date d'achat" :

Clients | Date d'achat
Client 1 | samedi 7 janvier 2010
Client 2 | dimanche 8 janvier 2010
Client 3 | samedi 14 janvier 2010
Client 4 | lundi 16 janvier 2010
Client 5 | lundi 16 janvier 2010

Voici le type d'infos que je souhaiterais obtenir :

Lundi : 2 clients
Mardi : 0 client
Mercredi : 0 client
Jeudi : 0 client
Vendredi : 0 client
Samedi : 2 clients
Dimanche : 1 client
(dans un joli graphique bien sûr, mais ça après je sais faire)

Voici ce que j'arrive actuellement à obtenir :
Janvier : 5 clients
OU
07/01/10 : 1 client
08/01/10 : 1 client
14/01/10 : 1 client
16/01/10 : 2 clients

J'ai tenté une vieille tactique de sioux consistant à ajouter un champ "jour semaine" en regard de la date, où je recopie simplement le nom du jour de la semaine qui est affiché à côté. Mais :
1. c'est fastidieux à l'usage
2. j'ai l'impression d'utiliser un marteau pour ouvrir un oeuf Kinder (il existe certainement une fonction permettant d'éviter ces tracas... Hein ?)
3. mes données se retrouvent classées par ordre alphabétique du jour (Dimanche, jeudi, lundi...), et c'est moche.

... Est-ce que quelqu'un pourrait m'aider ? :x
A voir également:

32 réponses

moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
9 janv. 2010 à 18:38
La requete suivante fonctionne le seul probleme c le order by

SELECT Count(lundi.nom) AS total, Format(date,'dddd') AS Expr1
FROM lundi
GROUP BY Format(date,'dddd')

il y a bien une fonction
order by field(champ,'lun'....)mais marche pas sous sql access
0
blux Messages postés 26533 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 décembre 2024 3 317
9 janv. 2010 à 19:06
Il suffit de rajouter un champ avec le jour de la semaine dans l'order by...
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
9 janv. 2010 à 19:09
Oui mais tu sera trié par order alphabetique
dimanche
jeudi
...
0
blux Messages postés 26533 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 décembre 2024 3 317
9 janv. 2010 à 19:11
je parlais du jour en numérique, celui renvoyé par datepart...
0
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 4
9 janv. 2010 à 20:37
... Je veux bien faire des tests chez moi pour voir quelle solution est efficace ou non, mais je ne comprends rien à votre échange... :oops:

Que dois-je faire concrètement ?
0
blux Messages postés 26533 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 décembre 2024 3 317
9 janv. 2010 à 20:42
order by datepart()
0
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 4
9 janv. 2010 à 20:51
Je ne sais pas comment vous le dire autrement, mais je ne COMPRENDS PAS ces mots ! Je suis désolé, mais ça n'a pas de sens pour moi ! Je suis un utilisateur débutant, une information telle que "Order by datepart()" m'est complètement obscure, et je ne sais pas ce que je dois en faire. Où cliquer, que taper ?
Si vous ne voulez pas m'expliquer ce qui équivaut pour moi à un beau charabiah, je crains que toute communication ne soit impossible.

(je suis désolé si je peux sembler un peu rude, surtout sachant que vous m'apportez une aide tombée du ciel, mais je ne sais plus comment m'y prendre...)
0
blux Messages postés 26533 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 décembre 2024 3 317
9 janv. 2010 à 21:02
Essaye ça (en remplaçant table3 par le nom de ta table, hein ? :-))

SELECT Count(Table3.Client) AS [Nombre de clients], Format(Table3.DateAchat,"dddd") AS Jour
FROM Table3
GROUP BY Table3.DateAchat
ORDER BY DatePart("w",dateachat);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 4
9 janv. 2010 à 21:24
SELECT c'est ce que je mets dans Champ, FROM dans Table, GROUP BY dans Opération, et ORDER BY dans Tri ?
Ya pas de champ "Client" dans la table "Facture". Ya bien un "N° de carte de fidélité-acheteur" mais je sais pas trop ce que tu veux en faire. Certaines factures n'ont pas de N° de carte, car il s'agit de clients ponctuels.

...
Les mecs, je viens de faire la découverte du siècle. Microsoft, ces salauds, eh ben ils avaient planqué un petit bouton dans Access, qui permet tout simplement de passer en mode de programmation SQL linéaire :) Et pis quand tu cliques dessus, eh ben tu peux taper toutes les conneries que tu veux ! Et pis ça marche ! Et pis c'est pas trop tôt putain parce que d'un coup là je peux utiliser ce que vous me dites depuis trois plombes !

DONC ;
Effectivement il pige pas de quel champ "Client" je parle, dans la table Facture. Ni DateAchat ou dateachat, ça existe pas.
0
blux Messages postés 26533 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 décembre 2024 3 317
9 janv. 2010 à 21:36
Je ne sais pas comme ils sont appelés tes champs, j'ai pris en fonction de ce que tu as donné au début :

Voici ce que je saisis dans ma table :

Clients | Date d'achat
Client 1 | 07/01/10


Si les noms sont différents, à toi de jouer (en sql c'est plus facile)
0
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 4
9 janv. 2010 à 22:20
Hum d'accord, désolé. J'avais oublié que j'avais donné des noms de champs au pif. Chuis un peu trop sur les nerfs moi...

Donc ça donne ça :
SELECT Count(Facture.N° facture) AS [Nombre de clients], Format(Facture.Date,"dddd") AS Jour
FROM Facture
GROUP BY Facture.Date
ORDER BY DatePart("w",Date);


Quand j'essaye d'enregistrer, il me dit que "Erreur de syntaxe (opérateur absent) dans l'expression " Count(Facture.N° facture) ".", et met en surbrillance le "facture" de "N° facture".
0
blux Messages postés 26533 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 décembre 2024 3 317
9 janv. 2010 à 22:50
Mets ton N° facture entre [], access n'aime pas les blancs dans les noms (ni les caractères exotiques)...
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
10 janv. 2010 à 09:20
re

je rajouterais juste une petite close ds le order by:
SELECT Count(Facture.N° facture) AS [Nombre de clients], Format(Facture.Date,"dddd") AS Jour
FROM Facture
GROUP BY Facture.Date
ORDER BY DatePart("w",Date,'2');

Pour que le tri commence le lundi et non dimanche
0
blux Messages postés 26533 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 décembre 2024 3 317
10 janv. 2010 à 21:06
Tout dépend quand il veut que commence sa semaine... :-)
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
11 janv. 2010 à 11:54
bonjour

oui je suis d'accord avec toi mais il a demandé lundi
0
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 4
12 janv. 2010 à 23:02
Salut les boyz. Depuis dimanche j'ai u eu accès à ma BDD, mais les affaires reprennent :) Là sous 2002, la requête ressemble à ça :
https://www.imagup.com
Le code utilisé est le suivant :
SELECT Count(Facture.[N° facture]) AS [Nombre de clients], Format(Facture.Date,"dddd") AS Jour
FROM Facture
GROUP BY Facture.Date
ORDER BY DatePart("w",Date,'2');
0
blux Messages postés 26533 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 décembre 2024 3 317
13 janv. 2010 à 08:21
je viens de voir que je me suis trompé, le GROUP BY est à faire sur la fonction :

GROUP BY Format(Facture.Date,"dddd")
0
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 4
13 janv. 2010 à 11:14
Merci blux.
Au moment d'ouvrir la requête le message suivnt apparaît :

"Vous avez essayé d'exécuter une requête ne comprenant pas l'expression spécifiée 'DataPart("w",Date'2')' comme une partie de la fonction d'agrégat."

Le code est maintenant le suivant:
SELECT Count(Facture.[N° facture]) AS [Nombre de clients], Format(Facture.Date,"dddd") AS Jour
FROM Facture
GROUP BY Format(Facture.Date,"dddd")
ORDER BY DatePart("w",Date,'2');
0
blux Messages postés 26533 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 18 décembre 2024 3 317
13 janv. 2010 à 13:10
bizarre !
supprime le ORDER BY pour voir...
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
13 janv. 2010 à 18:18
re

SELECT Format(date,'dddd') AS jour, Count(lundi.nom) AS total
FROM lundi
GROUP BY Format(date,'dddd'), DatePart("w",Date,'2')
ORDER BY DatePart("w",Date,'2');

fonctionne de mon coté
il faut que ton order by apparaisse ds ton select
0
burgerdash Messages postés 45 Date d'inscription vendredi 8 janvier 2010 Statut Membre Dernière intervention 16 août 2015 4
13 janv. 2010 à 20:04
Ah Blux c'est bon ! Ta version fonctionne, j'obtiens le résultat voulu. Merci beaucoup les mecs, blux, ced et Jean_Jacques :D

Kisses
0