Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/01/2012, 17h59   #1
Invité de passage
 
Inscription : décembre 2011
Messages : 39
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 39
Points : 2
Points : 2
Par défaut Requête UNION dans une sous-requête, est-ce vraiment non autorisé

Bonjour à tous ,
Je dispose d’une table de CLIENTS d’un hôtel comprenant les champs :
- ID : identifiant du client (C1, C2,…)
- DateDebut : date d’arrivée à l’hôtel
- DateFin : date de départ de l’hôtel
Je cherche à tracer l’évolution glissante (pendant un mois) du nombre de clients sur l’année 2011. Je réalise donc le calcul du nombre de clients pour une valeur de date appartenant soit au champ DateDebut soit au champ DateFin (seuls instants de variation possibles).

Pour cela je souhaite regrouper toutes les valeurs des 2 champs DateDebut et DateFin et les classer par ordre croissant. Je fais donc une requête UNION dans une sous-requête :
Code :
1
2
3
4
5
SELECT (SELECT DateDebut FROM Clients
               UNION SELECT DateFin FROM Clients) AS Jour,
               (SELECT Count(*)
              FROM Clients
              WHERE (Clients.DateDebut between Jour-30 and Jour) OR (Clients.DateFin between Jour-30 and Jour));
Mais Access me dit qu’il est impossible de faire ce genre de choses… Je ne vois pas comment faire autrement en écrivant qu’une seule requête.

Dites moi si vous souhaitez toute info complémentaire. Merci par avance pour votre aide.
sophie) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 18h50   #2
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 447
Points : 4 447
Bonsoir sophie,

Pourquoi ne pas décomposer :

R_Union :
Code sql :
1
2
3
SELECT DateDebut AS jour FROM Clients
UNION
SELECT DateFin FROM Clients;

Puis si j’ai bien compris l’intention:

Code sql :
1
2
3
4
SELECT U.Jour, count(*) AS NbClients
FROM R_Union U, Clients C
WHERE ((C.DateDebut BETWEEN jour-30 AND jour) OR  (C.DateFin BETWEEN jour-30 AND Jour))
GROUP BY U.jour ;

à tester… 
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 19h15   #3
Invité de passage
 
Inscription : décembre 2011
Messages : 39
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 39
Points : 2
Points : 2
Bonsoir f-leb,
merci de vous pencher sur mon problème.
en fait j'ai fait quelquechose de similaire à ce que vous m'avez indiqué, mais il faut que je n'écrive qu'une seule requête, d'où le fait que je bloque.
merci par avance pour votre aide.
sophie) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 19h32   #4
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 447
Points : 4 447
ça doit pouvoir s'imbriquer il me semble:

Code sql :
1
2
3
4
5
6
7
8
 
SELECT U.Jour, count(*) AS NbClients
FROM 
(SELECT DateDebut AS jour FROM Clients
UNION
SELECT DateFin FROM Clients) U, Clients C
WHERE ((C.DateDebut BETWEEN jour-30 AND jour) OR  (C.DateFin BETWEEN jour-30 AND Jour))
GROUP BY U.jour ;
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 22h43   #5
Invité de passage
 
Inscription : décembre 2011
Messages : 39
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 39
Points : 2
Points : 2
tout à fait, ça marche parfaitement ! merci beaucoup f-leb
je pense que mon problème vient du fait que je voulais faire l'UNION dans la clause SELECT et non dans le FROM, ce que m'interdisais Access.

J'ai ensuite fait un graphique; mais en abscisses les dates sont espacées de manière irrégulière dans le temps, comment faire pour dire à Access de tenir compte par exemple qu'il y a un plus grand espace entre (01/01/2010 et 10/01/2010) que entre (10/01/2010 et 12/01/2010) ?
car tous les abscisses valeurs de ma table sont espacées de manière identique...
en espérant avoir expliqué clairement.
merci par avance pour votre aide
sophie) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 23h48   #6
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 594
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 594
Points : 898
Points : 898
Bonjour

Dans Excel il faut préciser Chronologique dans le format d'axe.

Pas testé dans Access d'autant que tu ne précises pas ta version.
78chris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 10h50   #7
Invité de passage
 
Inscription : décembre 2011
Messages : 39
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 39
Points : 2
Points : 2
Bonjour 78chris,

je réalise mon graphique en Mode Graphique croisé dynamique sous Access 2007 à la suite d'une requête que je viens de faire.

J'ai essayé en mode Courbes (dans ce cas Access ne tient pas compte des valeurs des dates et elles sont toutes espacées de la même manière)
et en mode nuage de points rien ne marche car en abscisses Access affiche les dates de décembre 1899, alors que je n'ai que des dates pour l'année 2010. Je ne comprends pas et je n'arrive pas à décaler ...
sophie) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 12h12   #8
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 594
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 594
Points : 898
Points : 898
Bonjour

Toujours sur Excel (mais l'aspect graphique est assez proche) : l'axe n'est chronologique que sur les graphiques standard, pas sur les GCD.

Cela doit être du au fait que TCD et GCD sont filtrables et qu'il ne construit donc pas la ligne des temps sur ce qui n'est pas affiché.

A part tricher avec un enregistrement à 0 pour chaque jour calendaire de la période... je ne pense pas qu'il y ait une solution dans Access.
Dans Excel on peut construire un tableau B reprenant les données d'un TCD et ensuite construire un graphique standard...
78chris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 12h48   #9
Invité de passage
 
Inscription : décembre 2011
Messages : 39
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 39
Points : 2
Points : 2
merci pour ta réponse 78chris.

Il faut donc avoir une table contenant toutes les dates de l'année 2010, alors que seulement 20 enregistrements provoquent une modification de valeur de l'ordonnée. Ca engendre une énorme perte de place, quel dommage...
De plus, ajouter un enregistrement par exemple en avril 2011, provoque l'ajout d'environ 4*30 enregistrements...

je vous remercie par avance si vous avez une solution.
sophie) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 13h15   #10
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 447
Points : 4 447
bonjour,

bizarre, avec la requête précédente avec un graphique "nuage de points" j'obtiens le résultat souhaité il me semble.

J'ai Access 2010.
Images attachées
Type de fichier : png graphSophie.PNG (20,0 Ko, 6 affichages)
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 14h33   #11
Invité de passage
 
Inscription : décembre 2011
Messages : 39
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 39
Points : 2
Points : 2
Bonjour f-leb, merci pour votre réponse

Vu que je n’obtiens pas comme vous, je vous détaille comment je m’y prends afin que vous puissiez me dire si je fais une erreur quelquepart :

- Après affichage du résultat de ma requête en mode feuille de données : je clique sur Formulaires : Graphique croisé dynamique (étape1)
- D’où l’ouverture de la fenêtre pour créer le graphique et je fais glisser les données en abscisses et ordonnées (étape2)
- Résultat (étape3)
- Je change le type de graphique en nuage de points car il s’est mis par défaut en nuage de points (étape 4)
- Résultat final (étape5) : graphique incohérent !

En vous remerciant par avance.
Images attachées
Type de fichier : png Etape1.png (11,8 Ko, 4 affichages)
Type de fichier : png Etape2.png (57,5 Ko, 3 affichages)
Type de fichier : png Etape3.png (26,5 Ko, 3 affichages)
Type de fichier : png Etape4.png (24,4 Ko, 2 affichages)
Type de fichier : png Etape5.png (28,1 Ko, 2 affichages)
sophie) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 15h11   #12
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 594
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 594
Points : 898
Points : 898
Bonjour

Je connais mal les graphiques Access mais a priori si j'ai compris :
- il faut faire un formulaire vierge,
- y insérer un objet graphique,
- le lier à la requête (dans les propriétés une fois le graphique affiché),
- puis modifier les options d'affichage en double cliquant dessus (ce qui ouvre msgraph)

Ce qui donne un graphique classique et non un GCD et évite de recourir à Excel.
78chris est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/01/2012, 17h00   #13
Invité de passage
 
Inscription : décembre 2011
Messages : 39
Détails du profil
Informations forums :
Inscription : décembre 2011
Messages : 39
Points : 2
Points : 2
en fait j'avais aussi essayé cette solution, (cf pièce jointe) mais Access regroupe mes données par mois et calcule l'ordonnée en additionnant toutes les valeurs correspondant au même mois ... ce qui me donne quelque chose de complètement faux, et ne correpond plus à une évolution glissante du nombre de clients !

merci par avance si vous pouvez me dire comment f-leb a obtenu son graphique qui correpond exactement à ce que je recherche.
Images attachées
Type de fichier : png ObjetMsGraph.png (5,6 Ko, 4 affichages)
sophie) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2012, 17h49   #14
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 594
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 594
Points : 898
Points : 898
Bonjour

Si le graph est bien lié à la requête et que la requête ne fait pas de regroupement par mois et que le graph n'est pas cumulé cela marche.

Il faut bien remplacer le "select...." des propriétés du graphique par le nom de la requête.

Dans mon cas j'ai du inverser ligne/colonne dans le paramétrage msgraph

A priori ne se met à jour qu'en affichage pas en modification (ou je n'ai pas trouvé le bouton d'actualisation)
78chris est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h34.


 
 
 
 
Partenaires

Hébergement Web