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 05/01/2012, 11h58   #1
Membre du Club
 
Avatar de yoshï
 
Inscription : mai 2003
Messages : 158
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 158
Points : 41
Points : 41
Par défaut Requête d'analyse croisée

Bonjour,
Je ne suis pas un expert en BDD et je ne maitrise pas encore l'outil Access.
J'ai beaucoup de mal à créer une requête d'analyse croisée.

Le problème:
J'ai une table qui contient des véhicules enregistrés sur un péage.

Chaque ligne correspond à un véhicule qui arrive sur le péage. Pour chacun d'entre eux, j'ai les informations type de véhicule, voie de péage, heure d'arrivée.

Je voudrai créer un tableau qui m'afficherait pour un intervalle de temps le nombre de véhicule par type (type de véhicule = 2, 6...) qui sont passés dans chacune des voies de péage.

En gros en colonne il me faut le numéro de la voie, et je voudrai une ligne par type de véhicule (voiture = 2, bus =6...). Chaque case.ij du tableau indiquerait le nombre de véhicule de type i pour la voie j.
J'ai vraiment du mal à réaliser cette requête...

Il faut faire un regroupement par voie en En-tête de colonne, puis ajouter un regroupement sur le critère temps d'arrivée (Entre #Interval Debut# Et #Interval Fin#)... Mais après j'ai du mal à construire mes lignes: Je pense qu'il faut faire des sous requêtes pour avoir une ligne par catégorie de véhicule et compter le nb de véhicule par voie.

Bref je suis un peu perdu. Merci à toute personne pouvant me venir en aide
yoshï est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 17h49   #2
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Salut,

Voici en gros la marche à suivre:

Il te faut déjà utiliser l'assistant pour créer une requête analyse croisée basée sur ta table:

Tu indiques en en-têtes de lignes:
TypeVehicule

En en-têtes de colonnes:
NumeroVoie

et comme valeur:

Avec éventuellement un critère sur le champ Heure d'arrivée du style:

Code :
Entre [Interval Debut] Et [Interval Fin]

Tu peux aussi partir d'une sous-requête avec les 3 champs ou tu crées ton critère sur le champ Heure d'arrivée et baser ta RAC sur cette sous-requête.

A+

Denis
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 17h23   #3
Membre du Club
 
Avatar de yoshï
 
Inscription : mai 2003
Messages : 158
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 158
Points : 41
Points : 41
Bonjour et merci pour la réponse,
j'avais déjà réussi à avoir un tableau de cette forme mais j'aurai voulu grouper les véhicules par catégorie (au niveau des lignes) pour avoir directement la somme correspondant au type de véhicule pour chacune des voies. comment puis je m'y prendre

Code :
1
2
3
4
5
6
7
8
9
10
 
VEHICLE_CATEGORY         voie2        voie4   voie6     voie42     voie45  						1
type2					1		
type6			1				
type2						1	
type2							1
type9							
type2					1		
type2							1
type2						1
yoshï est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 17h28   #4
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
As-tu essayé de créer une requête croisée avec l'assistant ?
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 17h57   #5
Membre du Club
 
Avatar de yoshï
 
Inscription : mai 2003
Messages : 158
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 158
Points : 41
Points : 41
Citation:
As-tu essayé de créer une requête croisée avec l'assistant ?
oui,
en tête de colonnes : num de voie
en tête de lignes : type de vehicule

Pour rappel j'avais une table avec une enregistrement par véhicule:
num de voie, type de véhicule, hauteur du véhicule, heure de détection en péage.

L'objectif pour moi était de pouvoir répondre à une question du genre: combien de voiture de < 1 m 85 dans la voie 2 entre 8h et 9h.

Je voulais donc créer une table avec les colonnes correspondantes aux voies puis définir un type de véhicule par ligne
véhicule bas :
Code :
select * from checkin where vehice_category=2 and vehicle_height=1
véhicule haut :
Code :
select * from checkin where vehicle_category=2 and vehicle_height=2
bus:..........
et enfin faire un comptage pour chaque voie du type de véhicule dans l'intervalle de temps.

Et ce que j'obtiens pour l'instant c'est une matrice qui ne compte pas mais qui me donne juste la présence (0 ou 1) d'un véhicule d'un certain type sur chacune des voies . Je dois donc regrouper manuellement et faire la somme.
yoshï est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 18h18   #6
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Re,

N'oublie pas de mettre un regroupement sur la ligne opération :

pour le champ [num de voie] en en-tête de colonne (ligne Analyse) et
[type de vehicule] en en-tête de ligne.

Plus sur le champ [HeureArrivée] et sur la ligne opération mettre compte.

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 18h29   #7
Membre du Club
 
Avatar de yoshï
 
Inscription : mai 2003
Messages : 158
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 158
Points : 41
Points : 41
Citation:
Envoyé par User Voir le message
Re,

N'oublie pas de mettre un regroupement sur la ligne opération :

pour le champ [num de voie] en en-tête de colonne (ligne Analyse) et
[type de vehicule] en en-tête de ligne.

Plus sur le champ [HeureArrivée] et sur la ligne opération mettre compte.

A+
C'est exactement ce que j'ai fait.
Voici la traduction SQL de la requête (j'ai renommé les champs pour que ce soit compréhensible)

Code :
1
2
3
4
5
6
TRANSFORM Count(Heure_arrivée) AS CompteHeure_arrivée
SELECT vehicule_category
FROM table_peage
WHERE  (Heure_arrivée Between #12/3/2011 8:0:0# And #12/3/2011 8:10:0#)
GROUP BY Heure_arrivée , vehicule_category
PIVOT numero_voie;

ce qui donne un résultat du type :
Code :
1
2
3
4
5
6
7
8
9
10
 
    v2.v4.v6.
t2. 1. 0. 0
t2. 1. 0. 0	         
t9. 0. 1. 0
t2. 0. 1. 0
t2. 0. 0. 1
t2. 0. 0. 1
t2. 0. 0. 1
t6. 0. 1. 0
(ti = véhicule type i et vj= voie numéro j)

et moi je voudrai quelque chose qui ressemble plus à :
Code :
1
2
3
4
5
 
    v2.v4.v6.
t2. 2. 1. 3
t2. 0. 1. 0	         
t9. 0. 1. 0
yoshï est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 19h50   #8
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 206
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 206
Points : 5 256
Points : 5 256
Désolé j'ai des problèmes de connexion.

Essaie comme ça :

Code sql :
1
2
3
4
5
6
TRANSFORM Count(Heure_arrivée) AS CompteHeure_arrivée
SELECT vehicule_category
FROM table_peage
WHERE  (Heure_arrivée BETWEEN #12/3/2011 8:0:0# And #12/3/2011 8:10:0#)
GROUP BY vehicule_category
PIVOT numero_voie;

A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 20h54   #9
Membre du Club
 
Avatar de yoshï
 
Inscription : mai 2003
Messages : 158
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 158
Points : 41
Points : 41
j'essaye ça lundi en revenant au boulot. Merci pour ton aide
yoshï est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h02.


 
 
 
 
Partenaires

Hébergement Web