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
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
A voir également:
- SQL, Access, Questions...
- Blob sql ✓ - Forum Webmastering
- Access appdata - Guide
- Exemple base de données access à télécharger gratuit ✓ - Forum Logiciels
- You don't have permission to access this resource ✓ - Forum Réseaux sociaux
- Acer quick access - Forum Logiciels
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
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
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
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
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...
Juste filer des pistes et des conseils. Sinon j'y passerais mes journées entières...
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
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".
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".
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
6 juin 2008 à 12:54
Donne moi toute la syntaxe de ton SELECT, je vais essayer de comprendre.
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
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]);
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]);
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
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)
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)
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
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]);
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]);
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
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 '
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 '
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
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"...
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"...
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
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...
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...
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
6 juin 2008 à 14:03
Et avec ORDER BY MoisLettres???
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
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" ....
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" ....
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
6 juin 2008 à 14:15
je parle de mettre order by 1, en laisssant le reste...
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
6 juin 2008 à 14:15
Bon. Procédons par ordre. Si tu ORDER BY rien du tout, ça fait quoi?
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
6 juin 2008 à 14:16
En supprimant le ORDER BY, j'ai toujours le même problème d'agrégat...
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
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 ?
Poste ta requête pour voir ?
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
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...
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...
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
6 juin 2008 à 15:11
c'est normal, ton group by contient deux champs, mais ils doivent être les deux premiers de ton select...
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
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...
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...
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
6 juin 2008 à 15:26
ORDER BY 1,2,3 ?
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
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"
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
6 juin 2008 à 15:36
???
si tu supprimes les AS de renommage des colonnes ?
si tu supprimes les AS de renommage des colonnes ?
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
6 juin 2008 à 15:38
Pareil, sauf que c'est 'domaine' qui parle d'agrégat maintenant...
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
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...
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
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.
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.
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
6 juin 2008 à 17:28
Moi je suis pas partie du boulot, si tu as encore besoin, mais ce que dit Blux devrait fonctionner.
6 juin 2008 à 10:02
6 juin 2008 à 10:04