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 22/12/2011, 11h00   #1
Invité de passage
 
Homme
Urbaniste
Inscription : décembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Urbaniste
Secteur : Transports

Informations forums :
Inscription : décembre 2011
Messages : 3
Points : 1
Points : 1
Par défaut Regroupement sur 2 champs en analyse croisée

Bonjour,

Dans le cadre de l'exploitation d'une base de données sur les déplacements, je cherche à constituer à partir de la table suivante...

DEP(origine, destination, mode, nombre)

...une requête qui afficherait la somme de tous les déplacements dont l'origine ou la destination serait "domicile", selon le mode (en tête de colonnes) et le motif (en tête de ligne).

Après des heures de trifouillages je ne parviens qu'à obtenir un tableau du type:


-----------------| Bus | Vélo | Voiture
Domicile | Travail | 1 | 2 | 3
Travail | Domicile| 3 | 2 | 1
Domicile | Achat | 2 | 3 | 4
Achat | Domicile| 4 | 3 | 2


alors que je cherche à obtenir:

------ |Bus | Vélo | Voiture
Travail | 4 | 4 | 4
Achat | 6 | 6 | 6

c'est à dire regrouper en ligne par l'autre motif du couple origine-destination dont l'un est "Domicile".

J'espère avoir été compréhensible...


Merci d'avance à ceux qui se pencheront sur cette colle !


MLD
MELODE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 11h54   #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
Hello MELODE,

Je pense qu’il faut passer par une requête intermédiaire.
J’en vois deux pour aboutir au même résultat :
Code sql :
1
2
3
4
SELECT 
iif(origine='domicile', destination, domicile) AS TrajetDomicile, mode, nombre
FROM DEP
WHERE origine='domicile' OR destination='domicile' ;

Ou bien

Code sql :
1
2
3
4
5
6
7
8
9
(
   SELECT origine AS TrajetDomicile, mode, nombre FROM DEP
   WHERE destination='domicile'
)
UNION ALL
(
   SELECT destination, mode, nombre FROM DEP
   WHERE origine='domicile'
)

Puis tu fais ton analyse croisée sur la requête intermédiaire.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 12h23   #3
Invité de passage
 
Homme
Urbaniste
Inscription : décembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Urbaniste
Secteur : Transports

Informations forums :
Inscription : décembre 2011
Messages : 3
Points : 1
Points : 1
Bonjour,

Merci pour le coup de main !


J'ai testé les 2 formules

Les deux semblent fonctionner mais pour celle contenant l'UNION, j'ai les enregistrement domicile-domicile en double. Y'a t'il un moyen d'éviter cela ?
Je pense que la fonction UNION (que je découvre) pourra m'être utile à l'avenir...

Autre question: où insérer un groupement sur le premier champ (TrajetDomicile) qui me ferait une somme sur le nombre ?
MELODE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 19h21   #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
Citation:
Envoyé par MELODE
…j'ai les enregistrement domicile-domicile en double
Ah ben oui, je n’avais pas envisagé de trajets domicile-domicile
On va ne garder que la première requête avec iif qui fonctionne même dans ce cas précis (coup de bol !).

Après je n’ai pas bien compris ta question, dans la requête avec analyse croisée on fait :
- [TrajetDomicile] en "en-tête de ligne" ;
- [Mode] en "en-tête de colonne" ;
- puis [Nombre] en "valeur " avec l’opération "somme".

Ça ne marche pas ?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 23h59   #5
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
bonjour,

Sauf erreur, c'est possible directement avec une requête analyse croisée.

Code :
1
2
3
4
5
6
7
8
9
PARAMETERS [Analyse par] Text ( 255 );
TRANSFORM Sum(DEP.Nombre) AS SommeNombre
SELECT [Analyse par] AS Critere, IIf([Origine]=[Analyse par],[Destination],[Origine]) AS [De ou vers]
FROM DEP
WHERE [Analyse par] In ([Origine],[Destination]) AND DEP.Origine<>[Destination]
GROUP BY [Analyse par], IIf([Origine]=[Analyse par],[Destination],[Origine])
ORDER BY IIf([Origine]=[Analyse par],[Destination],[Origine])
PIVOT DEP.Mode;
C'est une RAC paramétrée, il faut écrire <Domicile> quand la requete le demande, ou autre souhait d'analyse (achat, ...)

De plus, j'ai enlevé le cas ou Origine=Destination. Pour le faire apparaître il suffit de retire la clause en rouge

Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 11h03   #6
Invité de passage
 
Homme
Urbaniste
Inscription : décembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Urbaniste
Secteur : Transports

Informations forums :
Inscription : décembre 2011
Messages : 3
Points : 1
Points : 1
Bonjour,

Je vous remercie pour vos réponses mais je n'ai plus le temps de m'y pencher pour le moment car je travaille sur autre chose.

En attendant de m'y replonger je classe le sujet en résolu.
MELODE 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 20h42.


 
 
 
 
Partenaires

Hébergement Web