SQL, Access, Questions...

Fermé
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 - 6 juin 2008 à 09:36
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 - 6 juin 2008 à 17:28
Bonjour a tous !

J'aimerais savoir si il y a une fonction en SQL qui permet de "traduire" un nombre en mois. Je m'explique :

Fonction(2) => "Février"
Fonction(10) => "Octobre"

Existe-t-elle ?
Sa ne me dérange pas que l'affichage soit en Anglais.



Ensuite, j'ai un petit soucis avec une requète sur une table sous acces 2002 (eh oui, encore...)

Voici le genre de ma table qui se nomme Af_table2 :
http://www.filebam.com/download/56223-6eaa6c/Rqte1.JPG

Il y a donc un numéro de demande (ZWU_NUM_DEM), un statut de la demande, et la date ou la demande a pris ce statut.

Jusque la, tout va bien.

Ensuite, il me faudrait une requète qui me donnerait la durée entre le statut "T" et le statut "X' ou "Z" par demande.

J'ai essayé de faire :
SELECT Af_table2.ZWU_NUM_DEM As num_dem, ((SELECT Af_table2.Date FROM Af_table2 WHERE (Af_table2.Statut="X" OR Af_table2.Statut="Z" )) - (SELECT Af_table2.Date FROM Af_table2 WHERE( Af_table2.Statut="T"))) As Temps
FROM Af_table2;

Aucun résultat : "Cette sous requète ne peut retourner au plus qu'un enregistrement."

Je sais pas du tout comment faire, Date-Date=Jours non ?

Je connais pas du tout le VBA, je sais pas ou le placer sous access. Je suis en stage en ce moment et mon supérieur veut absolument une base de donnée avec une colonne "Numéro de la demande" et une autre "Durée (en jours) entre "T" et "X" ou "Z"...

Comment faire ?

Merci d'avance

15 réponses

LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
6 juin 2008 à 10:00
Réponse à la première question:

Format(DateSerial(1900,[NumMois],1),"mmmm")

Et à la deuxième: Tu lui demandes de soustraire des champs qui ne se trouvent pas dans le même enregistrement. Impossible comme ça!!! C'est exactement ce pour quoi Access n'est pas fait. On n'est pas dans Excel.

Je ne sais pas comment sont oragnisées tes données à la base, mais si les T et les X sont dans des enregistrement différents, j'ai une piste qui me vient à l'esprit - Si c'est pas la meilleur, les autres, à vos claviers...

1 - Tu crées une table avec au moins 5 champs: Z_Num_Dem, StatutT, StatutNonT, DateT, DateNonT
2 - Tu fais une requête qui ajoutes tous les enregistrements de statut T avec leur date et le ZNum
3 - Tu fais une requête MAJ qui rempliras les champs DateNonT de chaque ZNum- la table et la requête initiale étant liées par le ZNumDem

Et de cette table tu pourras soustraire DateT et DateNonT




0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 696
6 juin 2008 à 10:02
Pas bête ! Merci du conseil, je vais essayer je vous tient au courant.
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 696
6 juin 2008 à 10:04
Mais j'ai a peu près 1900 tuples... Sa va pas être un peu lourd? Tu ne pourrais pas m'aider a créer les requètes? Je suis pas vraiment doué la dedans.
0
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
6 juin 2008 à 10:05
Non, ça ne sera pas lourd, et non, je ne peux pas t'aider à créer les requêtes.

Juste filer des pistes et des conseils. Sinon j'y passerais mes journées entières...
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 696
6 juin 2008 à 10:18
Ok jcomprends.
Mais pour les mois, sa pose un problème, dans le SELECT, j'ai beau mettre :
Format(DateSerial(1900,Af_table.Mois_dem,1),"mmmm")
il me réponds "la syntaxe de l'expression d'entrée n'est pas correcte, vous avez peut être entré un opérande sans opérateur".
0
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
6 juin 2008 à 12:54
Donne moi toute la syntaxe de ton SELECT, je vais essayer de comprendre.
0

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

Posez votre question
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 696
6 juin 2008 à 13:28
SELECT
DISTINCT Af_table.Année_dem, Af_table.Mois_dem, ([Domaine]) AS [Nom du Domaine], Count(([Domaine])) AS Nombre
INTO Af_Dom

FROM Af_table

WHERE
(((Af_table.Mois_dem)=4 Or (Af_table.Mois_dem)=5 Or (Af_table.Mois_dem)=6 Or (Af_table.Mois_dem)=7 Or (Af_table.Mois_dem)=8 Or (Af_table.Mois_dem)=9 Or (Af_table.Mois_dem)=10 Or (Af_table.Mois_dem)=11 Or (Af_table.Mois_dem)=12)
AND ((Af_table.Année_dem)=[Année IATA?])
AND ((Af_table.Statut)="X" Or (Af_table.Statut)="Z"))

OR (((Af_table.Mois_dem)=1 Or (Af_table.Mois_dem)=2 Or (Af_table.Mois_dem)=3)
AND ((Af_table.Année_dem)=([Année IATA?]+1))
AND ((Af_table.Statut)="X" Or (Af_table.Statut)="Z"))

GROUP BY Af_table.Année_dem, Af_table.Mois_dem, ([Domaine])

ORDER BY Af_table.Année_dem, Af_table.Mois_dem, ([Domaine]);
0
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
6 juin 2008 à 13:35
Plusieurs réflexions:

Dans le SELECT que tu m'envoies, il n'y a pas de SerialDate... Comment veux tu que je trouve ce qui ne fonctionne pas?????

Et l'autre truc, c'est qu'un petit Af_table.Mois_dem>=4 aurait été un peu plus léger... Heureusement qu'il n'y a que 12 mois dans l'année!!!

Remarque:
Si Mois_dem est de type texte, tu le remplaces par Val(Af_Table.Mois_Dem)
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 696
6 juin 2008 à 13:41
La fonction est SerialDate ou DateSerial ? Enfin, mois_dem n'as pas de type spécifique vu que la table est supprimé et reformé a chaque fois que je fais ma requète, me demande pas pourquoi...

Avec la fonction sa donnerait :

SELECT
DISTINCT Af_table.Année_dem, Format(DateSerial(1900,Af_table.Mois_dem,1),"mmmm") , ([Domaine]) AS [Nom du Domaine], Count(([Domaine])) AS Nombre
INTO Af_Dom

FROM Af_table

WHERE
(((Af_table.Mois_dem)>=4)
AND ((Af_table.Année_dem)=[Année IATA?])
AND ((Af_table.Statut)="X" Or (Af_table.Statut)="Z"))

OR (((Af_table.Mois_dem)<4)
AND ((Af_table.Année_dem)=([Année IATA?]+1))
AND ((Af_table.Statut)="X" Or (Af_table.Statut)="Z"))

GROUP BY Af_table.Année_dem, Af_table.Mois_dem, ([Domaine])

ORDER BY Af_table.Année_dem, Af_table.Mois_dem, ([Domaine]);
0
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
6 juin 2008 à 13:49
essaye de rajouter ça au cas où, mais je ne suis pas sûre que ça soit ça qui bloque:
Format(DateSerial(1900,Af_table.Mois_dem,1),"mmmm") AS MoisLettres

Si tu mets juste Af_table.Mois_Dem, ton SQL marche???
Ah oui, aussi, remplace les " par '
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 696
6 juin 2008 à 13:55
Avec jsute "Af_table.Mois_Dem", tout marche.

Avec "Format(DateSerial(1900,Af_table.Mois_dem,1),"mmmm") AS MoisLettres", j'ai maintenant le message d'erreur "La clause ORDER BY (Af_table.Mois_dem) est en conflit avec DISTINCT"...
0
blux Messages postés 26503 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 décembre 2024 3 317 > Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012
6 juin 2008 à 14:03
Salut,

le mieux, c'est que tu mettes order by 1, comme ça, il fait le tri sur la première colonne, quel que soit son nom...
sinon, af_table.mois_dem n'est pas connu en tant que tel...
0
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
6 juin 2008 à 14:03
Et avec ORDER BY MoisLettres???
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 696
6 juin 2008 à 14:07
LatelyGeek, avec MoisLettres, sa me fait la même erreur sauf que le nom de la variable est différent.
Blux, si je retire MoisLettres, je tombe sur l'erreur "Vous avez essayer d'éxécuter une requète Ne comprenant pas "Format(DateSerial(1900,Af_table.Mois_dem,1),"mmmm")" comme une partie de la fonction d'agrégat" ....
0
blux Messages postés 26503 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 décembre 2024 3 317
6 juin 2008 à 14:15
je parle de mettre order by 1, en laisssant le reste...
0
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
6 juin 2008 à 14:15
Bon. Procédons par ordre. Si tu ORDER BY rien du tout, ça fait quoi?
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 696
6 juin 2008 à 14:16
En supprimant le ORDER BY, j'ai toujours le même problème d'agrégat...
0
blux Messages postés 26503 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 décembre 2024 3 317
6 juin 2008 à 14:18
Dans le GROUP BY, on doit retrouver le même champ que dans le SELECT...

Poste ta requête pour voir ?
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 696
6 juin 2008 à 14:20
SELECT
DISTINCT Af_table.Année_dem, Format(DateSerial(1900,Af_table.Mois_dem,1),'mmmm') AS MoisLettres , ([Domaine]) AS [Nom du Domaine], Count(([Domaine])) AS Nombre
INTO Af_Dom

FROM Af_table

WHERE
(((Af_table.Mois_dem)>=4)
AND ((Af_table.Année_dem)=[Année IATA?])
AND ((Af_table.Statut)='X' Or (Af_table.Statut)='Z'))

OR (((Af_table.Mois_dem)<4)
AND ((Af_table.Année_dem)=([Année IATA?]+1))
AND ((Af_table.Statut)='X' Or (Af_table.Statut)='Z'))

GROUP BY Af_table.Année_dem, ([Domaine])

ORDER BY Af_table.Année_dem, ([Domaine]);

Et avec sa j'ai toujours le truc de l'agrégat...
0
blux Messages postés 26503 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 décembre 2024 3 317
6 juin 2008 à 15:11
c'est normal, ton group by contient deux champs, mais ils doivent être les deux premiers de ton select...
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 696
6 juin 2008 à 15:14
Du nouveau :
avec

SELECT DISTINCT Af_table.Année_dem, Format(DateSerial(1900,Af_table.Mois_dem,1),'mmmm') AS MoisLettres, ([Domaine]) AS [Nom du Domaine], Count(([Domaine])) AS Nombre INTO Af_Dom
FROM Af_table
WHERE (((Af_table.Mois_dem)>=4) AND ((Af_table.Année_dem)=[Année IATA?]) AND ((Af_table.Statut)='X' Or (Af_table.Statut)='Z')) OR (((Af_table.Mois_dem)<4) AND ((Af_table.Année_dem)=([Année IATA?]+1)) AND ((Af_table.Statut)='X' Or (Af_table.Statut)='Z'))
GROUP BY Af_table.Année_dem, Format(DateSerial(1900,Af_table.Mois_dem,1),'mmmm'), [Nom du Domaine]
ORDER BY Af_table.Année_dem, Format(DateSerial(1900,Af_table.Mois_dem,1),'mmmm'), [Nom du Domaine];

Il me sort "La clause ORDER BY ([Nom du domaine]) est en conflit avec DISTINCT"...

Je vais bien, tout va bien...
0
blux Messages postés 26503 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 décembre 2024 3 317 > Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012
6 juin 2008 à 15:26
ORDER BY 1,2,3 ?
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 696 > blux Messages postés 26503 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 décembre 2024
6 juin 2008 à 15:29
Erreur "Vous avez essayer d'éxécuter une requète Ne comprenant pas 'Nom du domaine' comme une partie de la fonction d'agrégat"
0
blux Messages postés 26503 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 décembre 2024 3 317 > Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012
6 juin 2008 à 15:36
???

si tu supprimes les AS de renommage des colonnes ?
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 696 > blux Messages postés 26503 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 décembre 2024
6 juin 2008 à 15:38
Pareil, sauf que c'est 'domaine' qui parle d'agrégat maintenant...
0
Remad Messages postés 1662 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 27 juillet 2012 696
6 juin 2008 à 16:38
Euh ouais, mais si je marque sa directement sous access, il aime pas vu qu'il y a 2 requètes a la suite...
0
blux Messages postés 26503 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 2 décembre 2024 3 317
6 juin 2008 à 16:49
tu modifies ta requête initiale, celle qui marche, pour supprimer la notion de mois en toutes lettres, le Format(DateSerial(1900,Af_table.Mois_dem,1),'mmmm') que tu remplaces par Af_table.Mois_dem partout où tu le vois. ta requête est maintenant correcte sauf qu'elle n'affiche pas le mois en toutes lettres.

Tu enregistres cette requête sous un nom qui te plait, et tu crées une autre requête qui se base sur la requête que tu viens d'enregistrer. Il te suffit de faire un select des champs renvoyés par la requête avec reformatage pour mettre le mois en toutes lettres (format(("01/" & Requête4.expr1 & "/1900"),"mmmm") et de mettre en autre critère de tri le numéro du mois, comme dans l'exemple que je t'ai donné au-dessus... C'est plus clair ? Sinon, ça devra attendre, je m'en vais du boulot...

Une requête peut avoir comme source de données une autre requête, ce n'est pas un problème.
0
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 550
6 juin 2008 à 17:28
Moi je suis pas partie du boulot, si tu as encore besoin, mais ce que dit Blux devrait fonctionner.
0