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 :

Sql Pivot multi champs dans une colonne [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 83
    Points : 58
    Points
    58
    Par défaut Sql Pivot multi champs dans une colonne
    Bonjour à tout le monde!
    Mon problème est le suivant:
    J'ai la table suivante: Tbl_Statistiques

    Classe---Sexe----6ans-----7ans------8ans
    ... 1..........M..........12..........8............ 5...
    ... 1..........F..........9..........10............ 25...
    ... 2..........M..........0..........8.............. 7...
    ... 2..........F..........1..........11............ 10...

    Et je veux avoir ceci deux entetes colonnes, avec chaque colonne Age est divisée en deux sub colonnes)

    ----Age-+----6ans----+-----7ans-----+-----8ans
    Classe---!--M----F---!---M----F-----!--M----F--
    ---1-----!--12---9---!---8----10-----!---5---25--
    ---2-----!--0----1---!---8----11-----!---7---10--

    Est ce que cela est possible avec SQL ? Si oui, je suis prenneur de toute idée ? Sql ? Je sais qu'Access ne fait pas avec requete croisée.
    Merci à tout le monde.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 598
    Points : 34 283
    Points
    34 283
    Par défaut
    salut,

    dans quel cadre souhaites-tu afficher ce résultat ? Formulaire ? Etat ? Fichier Excel ?

    Il est toujours possible de passer par des étapes intermédiaires voire du code VBA pour y arriver
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    Salut tout le monde!
    jpcheck, merci pour ta réponse.
    Je veux utiliser la requete souhaité( voir post1) comme source de donnés
    pour un état Access.
    J'attends toujours vos réponses. Merci

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    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 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    bonsoir,

    on peut faire la requête avec les assistants. Il faut ajouter trois fois la table Tbl_Statistiques et faire les jointures gauches pour avoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Tbl_Statistiques------>Tbl_Statistiques_1
                  |-------->Tbl_Statistiques_2
    , rajouter deux colonnes (décocher la case "Afficher") avec comme critère:
    Tbl_Statistiques_1.sexe='M'
    Tbl_Statistiques_2.sexe='F'

    Puis on fait glisser les 3 champs 6ans, 7ans et 8ans de Tbl_Statistiques_1 et les 3 champs 6ans, 7ans et 8ans de Tbl_Statistiques_2 pour affichage.

    J'oubliais, dans la feuille de propriétés de la requête il faut mettre "Valeurs distinctes" à "Oui".

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    Bonjour à tout le monde!
    Merci à f-leb
    Ta réponse a mis les choses en ordre. Mille merci
    Mais, je veux amélioer l'affichage des données comme suit:

    Situation de Départ: Tbl_Statistiques

    Classe--Scolarité--Sexe----6ans-----7ans------8ans
    ... 1.......Nouveau...M..........12..........8............ 5...
    ... 1.......Nouveau...F..........9..........10............ 25...
    ... 1.......Doublant....M..........0..........1.............. 2...
    ... 1.......Doublant....F..........1...........2............ ..3...
    ... 2.......Nouveau...M..........14.........18............ 35...
    ... 2.......Nouveau....F..........9..........7............... 22...
    ... 2.......Doublant....M..........1..........3.............. 2...
    ... 2.......Doublant....F..........1..........2............ ...0...

    Et je veux avoir ceci deux entetes colonnes avec chaque colonne Age est divisée en deux sub colonnes) et deux entete lignes :

    -----------Age---+----6ans---+-----7ans----+-----8ans
    Classe---!Scolarité!--M----F---!---M----F-----!--M----F--
    ---1-----!Nouveau!--12---9---!---8----10-----!---5---25--
    ---1-----!Doublant!--0----1---!---1----2-----!---2----3--
    ---2-----!Nouveau!--14---9---!---18----7-----!--35---22--
    ---2-----!Doublant!--1----1---!---3-----2-----!---2----0--

    Merci à tout le monde sans oublier developpez.com !!!

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


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 621
    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 621
    Points : 56 867
    Points
    56 867
    Billets dans le blog
    40
    Par défaut
    bonjour,

    hé bien il faut maintenant faire les jointures entre Tbl_Statistiques et Tbl_Statistiques_1 sur les deux champs Classe et Scolarité.
    Idem entre Tbl_Statistiques et Tbl_Statistiques_2

    Puis tu rajoutes la colonne Tbl_Statistiques.scolarité pour affichage

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 83
    Points : 58
    Points
    58
    Par défaut
    Salut. Bravo f-leb.
    C'est le résultat exacte que je cherche depuis plus de 18mois.
    Merci encore une fois à developpez.com

  8. #8
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2005
    Messages : 38
    Points : 94
    Points
    94
    Par défaut Autre solution : le champ combiné, et/ou l'union
    Salut à tous,
    Autre solution que j'utilise très souvent : le champ combiné.

    Tu fais une requête intermédiaire, dans laquelle tu combine le champs que tu veux en colonnes. Dans ton cas "CStr(Age) & Sex", qui va te donner 6F, 6M, 7F, 7M, 8F, 8M.

    Ensuite il te reste à faire le pivot en mettant en colonne ce champ combiné.


    Autre cas similaire, j'ai des chiffres d'affaires par fournisseur et par année, le résultat des requêtes de cumul se présente comme ça :
    Nom Annee NbPièces MontantCA
    Fourn1 2010 5123 89867,00
    Fourn2 2010 5123 89867,00
    Fourn3 2010 5123 89867,00
    Fourn1 2011 5123 89867,00
    Fourn3 2011 5123 89867,00
    Fourn1 2012 5123 89867,00
    Fourn2 2012 5123 89867,00
    Fourn3 2012 5123 89867,00

    Et je veux au final
    ------------------ 2010 ---------- 2011 --------- 2012
    --------------- Nb --- Mnt ---- Nb --- Mnt ---- Nb --- Mnt
    Fourn1 ------ 15 --- 12 ----- 15 --- 12 ----- 15 --- 12
    Fourn2 ------ 8 --- 4 --------------------- 9 --- 6
    Fourn3 ------ 16 --- 4 ----- 14 -- 9 ------ 15 --- 19

    Et pour faire cela, idem :
    Première étape, je dédouble mes lignes, en créant 1 ligne pour le montant et une autre ligne pour la Qté :
    Select Fourn, Cstr(Année)&"Nb" as col, Nb as val
    UNION
    Select Fourn, CStr(Année)&"Mnt" as col, Mnt as val
    Et la seconde étape, c'est l'analyse croisée.

    Pas si dur, il fallait juste y penser

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

Discussions similaires

  1. SQL / Inserer plusieurs champs dans une Colonne(ATTRIBUT)
    Par cedill23 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 08/07/2009, 11h03
  2. Modification d'un champ dans une colonne
    Par manusharepoint dans le forum SharePoint
    Réponses: 1
    Dernier message: 06/06/2008, 14h44
  3. SQL Loader : deux champs dans une colonne
    Par Kiroukool dans le forum SQL*Loader
    Réponses: 4
    Dernier message: 05/10/2007, 10h21
  4. Requête SELECT avec deux champs dans une colonne ??
    Par fredhali2000 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 08/06/2006, 10h41
  5. [SQL] Renommer un champ dans une requête
    Par martonpylon12 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 15/11/2003, 01h59

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