{Access} Code SQL
hadrianovich
Messages postés
30
Date d'inscription
Statut
Membre
Dernière intervention
-
moderno31 Messages postés 872 Date d'inscription Statut Membre Dernière intervention -
moderno31 Messages postés 872 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voilà je suis en train de créer un tableau de bord et je fais mes requêtes et par curiosité je me demandé si il est possible de regrouper plusieurs requêtes ( en une seule ) du type:
SELECT SUM(Devis.P1) AS Expr1
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE ((Devis.[Date de restitution])>#12/31/2008# And (Devis.[Date de restitution])<#2/1/2009#);
SELECT SUM(Devis.P1) AS Expr2
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE ((Devis.[Date de restitution])>#01/31/2009# And (Devis.[Date de restitution])<#3/1/2009#);
SELECT SUM(Devis.P1) AS Expr3
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE ((Devis.[Date de restitution])>#02/28/2009# And (Devis.[Date de restitution])<#4/1/2009#);
... et ce jusque la fin de l'année!
Cela me permettrait en effet de ne pas avoir de problème avec le nombre maximum de requêtes imposées par access
Merci d'avance :)
Voilà je suis en train de créer un tableau de bord et je fais mes requêtes et par curiosité je me demandé si il est possible de regrouper plusieurs requêtes ( en une seule ) du type:
SELECT SUM(Devis.P1) AS Expr1
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE ((Devis.[Date de restitution])>#12/31/2008# And (Devis.[Date de restitution])<#2/1/2009#);
SELECT SUM(Devis.P1) AS Expr2
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE ((Devis.[Date de restitution])>#01/31/2009# And (Devis.[Date de restitution])<#3/1/2009#);
SELECT SUM(Devis.P1) AS Expr3
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE ((Devis.[Date de restitution])>#02/28/2009# And (Devis.[Date de restitution])<#4/1/2009#);
... et ce jusque la fin de l'année!
Cela me permettrait en effet de ne pas avoir de problème avec le nombre maximum de requêtes imposées par access
Merci d'avance :)
A voir également:
- {Access} Code SQL
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
14 réponses
HEllo,
Essaye de voir si UNION ou UNION ALL fonctionne avec access.
Entre chaque bout de requete tu met ça.
Par contre il s'agit de la meme table à des dates différentes.
sinon Je ne comprends pas vien ce que tu veux faire.
Essaye de voir si UNION ou UNION ALL fonctionne avec access.
Entre chaque bout de requete tu met ça.
Par contre il s'agit de la meme table à des dates différentes.
sinon Je ne comprends pas vien ce que tu veux faire.
Salut!!
Merci de ta réponses j'ai déjà essayé mais ça ne marche pas...
En gros ce que je désire est d'avoir un tableau d'une seule ligne avec pour chaque mois le nombre de devis c'est pour ca que je les ai regroupé par date dans mon code sql mais pour l'instant je suis obligé de faire une requête pour chaque mois et de les regrouper après...
Hadrien
Merci de ta réponses j'ai déjà essayé mais ça ne marche pas...
En gros ce que je désire est d'avoir un tableau d'une seule ligne avec pour chaque mois le nombre de devis c'est pour ca que je les ai regroupé par date dans mon code sql mais pour l'instant je suis obligé de faire une requête pour chaque mois et de les regrouper après...
Hadrien
Hadrien ?
Ouaw j'adore la façon dont ton prénom/pseudo s'écrit.. Trop bien lol
Heu donc, tu veux avoir pour chaque mois le total de devis.p1 ?
Tu peux me mettre comme ça
Select month(date-restitution dans le format anglais comme tu as mis) as mois, sum(devis.p1) as total_devis from table...plus reste de que requete. avec clause where = que l'année 2009. Il te le sortira mois par mois et sommé. Oublie pas de faire un groupe by sur la colonne mois.
Ouaw j'adore la façon dont ton prénom/pseudo s'écrit.. Trop bien lol
Heu donc, tu veux avoir pour chaque mois le total de devis.p1 ?
Tu peux me mettre comme ça
Select month(date-restitution dans le format anglais comme tu as mis) as mois, sum(devis.p1) as total_devis from table...plus reste de que requete. avec clause where = que l'année 2009. Il te le sortira mois par mois et sommé. Oublie pas de faire un groupe by sur la colonne mois.
Salut!
Merci de ta réponse j'ai tenté :
Select month(date_restitution) AS mois, sum(devis.p1) as total_devis FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet group by month
Mais il me demande une date et je ne sais pas pourquoi...
Merci!
Merci de ta réponse j'ai tenté :
Select month(date_restitution) AS mois, sum(devis.p1) as total_devis FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet group by month
Mais il me demande une date et je ne sais pas pourquoi...
Merci!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Re,
il n'y a plus de clause WHERE.
Aussi astu vérifié le format de ton champ date ?
Month ne fonctionne qu'avec des date du format orignal DATETIME anglais.
Quand je teste access 2003 version Fr ne sait pas afficher de date dans ce format.
Par contre que je fait month(date_ta_date au format date/heure) il me revoie bien le mois.
il n'y a plus de clause WHERE.
Aussi astu vérifié le format de ton champ date ?
Month ne fonctionne qu'avec des date du format orignal DATETIME anglais.
Quand je teste access 2003 version Fr ne sait pas afficher de date dans ce format.
Par contre que je fait month(date_ta_date au format date/heure) il me revoie bien le mois.
Bonjour,
Merci de ta réponse je regarde pour le format de la date.
Je n'ai pas besoin de clause where si il me trie déjà les montants par mois et qu'il me les regroupe en faisant le total.
Hadrien
Merci de ta réponse je regarde pour le format de la date.
Je n'ai pas besoin de clause where si il me trie déjà les montants par mois et qu'il me les regroupe en faisant le total.
Hadrien
ok,
j'ai poussé un peu et en version Fr de Access pas de date format datetime anglais.
month, day, year renvoient bien les éléments attendus de DATE_JJMMAAAA
j'ai poussé un peu et en version Fr de Access pas de date format datetime anglais.
month, day, year renvoient bien les éléments attendus de DATE_JJMMAAAA
Rebonjour,
Voilà j'ai une autre question , est t'il possible de faire quelquechose du type:
Select month(date_restitution) AS mois, sum(devis.p1) as total_devis , YEAR(date_restitution) as année
FROMDevis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet group by mois
avec un group by year quelquepart pour qu'en plus il me rajoute les années à côté du mois?
Merci
Voilà j'ai une autre question , est t'il possible de faire quelquechose du type:
Select month(date_restitution) AS mois, sum(devis.p1) as total_devis , YEAR(date_restitution) as année
FROMDevis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet group by mois
avec un group by year quelquepart pour qu'en plus il me rajoute les années à côté du mois?
Merci
Voilà le problème...
"Vous avez essayé d'exécuter une requête ne comprenant pas l'expression spécifiée "month(Devis.[date de restitution])" comme une partie de la fonction d'agrégat."
Pour :Select month(date_restitution) AS mois, sum(devis.p1) as total_devis FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet group by mois
"Vous avez essayé d'exécuter une requête ne comprenant pas l'expression spécifiée "month(Devis.[date de restitution])" comme une partie de la fonction d'agrégat."
Pour :Select month(date_restitution) AS mois, sum(devis.p1) as total_devis FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet group by mois
Oula j'ai pas suivi, tu as fait ta req et access ta renvoyé une erreur c'est ça ?
Ma correction
J'ai pris l'habitude de faire mes group by sur l'intitulé original des champs. Pas sur leur alias.
Sous SQL server ça ne passe pas de group by sur alias.
De même que j'ai pris l'habitude de ne faire que des LEFT JOIN, comme ça je suis au courant lorqu'une jointure n'a pu etre faite (NULL). Le INNER va te renvoyer que les jointures possibles.
Dit moi si tu as des soucis avec le month(date...) sous access. Et si oui fait moi voir ce que tu lui écrit. J'ai testé ça marche...
Ma correction
SELECT MONTH(date_restitution) AS mois ,SUM(devis.p1) AS total_devis ,YEAR(date_restitution) as année FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet GROUP BY MONTH(date_restitution), YEAR(date_restitution)
J'ai pris l'habitude de faire mes group by sur l'intitulé original des champs. Pas sur leur alias.
Sous SQL server ça ne passe pas de group by sur alias.
De même que j'ai pris l'habitude de ne faire que des LEFT JOIN, comme ça je suis au courant lorqu'une jointure n'a pu etre faite (NULL). Le INNER va te renvoyer que les jointures possibles.
Dit moi si tu as des soucis avec le month(date...) sous access. Et si oui fait moi voir ce que tu lui écrit. J'ai testé ça marche...
bonjour à tous !
Voilà j'ai essayé avec UNION quelque chose du type
SELECT COUNT(Devis.P1) AS JANVIER
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") AND ((Devis.[Date de restitution])>#12/31/2008# And (Devis.[Date de restitution])<#2/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS FEVRIER
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#1/31/2009# And (Devis.[Date de restitution])<#3/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS MARS
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#2/28/2009# And (Devis.[Date de restitution])<#4/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS AVRIL
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#3/31/2009# And (Devis.[Date de restitution])<#5/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS MAI
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#4/30/2009# And (Devis.[Date de restitution])<#6/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS JUIN
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#5/31/2009# And (Devis.[Date de restitution])<#7/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS JUILLET
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#6/30/2009# And (Devis.[Date de restitution])<#8/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS AOUT
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#7/31/2009# And (Devis.[Date de restitution])<#9/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS SEPTEMBRE
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#8/31/2009# And (Devis.[Date de restitution])<#10/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS OCTOBRE
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#9/30/2009# And (Devis.[Date de restitution])<#11/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS NOVEMBRE
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") AND ((Devis.[Date de restitution])>#10/31/2009# And (Devis.[Date de restitution])<#12/1/2009#))
UNION SELECT COUNT(Devis.P1) AS DECEMBRE
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#11/30/2009# And (Devis.[Date de restitution])<#1/1/2010#));
Il m'affiche bien les données que je veut sauf qu'elles sont positionnées très bizarrement à savoir qu'en fait avec cette formule j'obtiens tout dans la même colonne(ici janvier)
L'autre problème est qu'il ne m'affiche rien quand le resultat est égal à zéro!
Voilà j'espère que vous allez pouvoir m'aider
Hadrien
Voilà j'ai essayé avec UNION quelque chose du type
SELECT COUNT(Devis.P1) AS JANVIER
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") AND ((Devis.[Date de restitution])>#12/31/2008# And (Devis.[Date de restitution])<#2/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS FEVRIER
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#1/31/2009# And (Devis.[Date de restitution])<#3/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS MARS
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#2/28/2009# And (Devis.[Date de restitution])<#4/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS AVRIL
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#3/31/2009# And (Devis.[Date de restitution])<#5/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS MAI
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#4/30/2009# And (Devis.[Date de restitution])<#6/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS JUIN
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#5/31/2009# And (Devis.[Date de restitution])<#7/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS JUILLET
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#6/30/2009# And (Devis.[Date de restitution])<#8/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS AOUT
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#7/31/2009# And (Devis.[Date de restitution])<#9/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS SEPTEMBRE
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#8/31/2009# And (Devis.[Date de restitution])<#10/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS OCTOBRE
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#9/30/2009# And (Devis.[Date de restitution])<#11/1/2009#))
UNION
SELECT COUNT(Devis.P1) AS NOVEMBRE
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") AND ((Devis.[Date de restitution])>#10/31/2009# And (Devis.[Date de restitution])<#12/1/2009#))
UNION SELECT COUNT(Devis.P1) AS DECEMBRE
FROM Devis INNER JOIN Projet ON Devis.Num_devis=Projet.Num_Projet
WHERE (((Projet.Niv)="0") And ((Devis.[Date de restitution])>#11/30/2009# And (Devis.[Date de restitution])<#1/1/2010#));
Il m'affiche bien les données que je veut sauf qu'elles sont positionnées très bizarrement à savoir qu'en fait avec cette formule j'obtiens tout dans la même colonne(ici janvier)
L'autre problème est qu'il ne m'affiche rien quand le resultat est égal à zéro!
Voilà j'espère que vous allez pouvoir m'aider
Hadrien
Perso j'ai pas le truc sous les yeux donc ça devient complicated.
Je ne connais pas la structure de tes données donc j'ai un peu de mal à te conseiller. Si tu étais mon voisin ça serait simple :MDR
Par contre pourquoi tu nes fais pas une requetes pour l'année, avec un champ "mois" dans ton select, puis un group by à la fin à cause de ton SUM.
Je ne connais pas la structure de tes données donc j'ai un peu de mal à te conseiller. Si tu étais mon voisin ça serait simple :MDR
Par contre pourquoi tu nes fais pas une requetes pour l'année, avec un champ "mois" dans ton select, puis un group by à la fin à cause de ton SUM.