IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Regroupement sur 2 champs en analyse croisée [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Décembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2011
    Messages : 11
    Points : 7
    Points
    7
    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

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 884
    Points : 58 499
    Points
    58 499
    Billets dans le blog
    45
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Décembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2011
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    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 ?

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 884
    Points : 58 499
    Points
    58 499
    Billets dans le blog
    45
    Par défaut
    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 ?

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Décembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2011
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/03/2017, 19h45
  2. [AC-2007] Imprimer un état regrouper sur un champ du détail
    Par tibofo dans le forum IHM
    Réponses: 2
    Dernier message: 09/12/2009, 15h11
  3. Concaténation avec regroupement sur un champs
    Par isabelle b dans le forum VBA Access
    Réponses: 12
    Dernier message: 23/05/2008, 08h27
  4. Pb pour regrouper lignes d'une requête analyse croisée
    Par avry91 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/02/2008, 13h01
  5. Réponses: 2
    Dernier message: 28/01/2008, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo