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 :

Transposer une table en réduisant le nombre de champ [AC-2016]


Sujet :

Requêtes et SQL.

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 895
    Par défaut Transposer une table en réduisant le nombre de champ
    Bonjour,

    Jai une table importante dans laquelle j'ai plusieurs champs montants pour x colonnes (par exemple cpte1, cpte 2, ..., cpte x)

    Je voudrais n'avoir qu'une seule colonne "montant" et ajouter un champ "compte" qui reprendrait le nom de la colonne initiale.

    Par exemple

    ID [Cpte 1] [Cpte 2] [Cpte 3] [Cpte 4]
    1 2 10 9 9
    2 7 1 8 6
    3 7 6 10 5
    4 5 9 8 7
    5 8 1 2 9
    6 9 8 7 3
    7 9 7 2 1
    8 7 6 9 2
    9 8 5 8 2
    10 5 2 8 10


    deviendrait :

    ID Compte Montant
    1 [Cpte 1] 2
    1 [Cpte 2] 10
    1 [Cpte 3] 9
    1 [Cpte 4] 9
    2 [Cpte 1] 7
    2 [Cpte 2] 1
    2 [Cpte 3] 8
    2 [Cpte 4] 6
    etc...

    Comment puis-je faire

    Merci pour votre aide

  2. #2
    Membre éclairé
    Homme Profil pro
    contrôle de gestion - data management
    Inscrit en
    Mai 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : contrôle de gestion - data management
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2018
    Messages : 33
    Par défaut
    Bonjour, si tu n'as que peu de comptes, tu peux utiliser une commande UNION comme celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT t.id, "cpte1" AS Compte, Sum(t.cpte1) AS Montant
    FROM tableTest t
    GROUP BY t.id, "cpte1"
     
    UNION
     
    SELECT t.id, "cpte2" AS Compte, Sum(t.cpte2) AS Montant
    FROM tableTest t
    GROUP BY t.id, "cpte2"
     
    etc...
     
    ;
    Si vraiment tu en as quand même une petite quantité, tu peux utiliser excel pour te faire un fichier qui t'écris chacun des "SELECT" en adaptant le numéro des comptes.
    Exemple :

    Nom : transpose.png
Affichages : 172
Taille : 9,4 Ko

    Si tu en as vraiment beaucoup ou que tu veux automatiser, tu peux faire un traitement VBA avec une boucle For qui te crée la table sur la 1er tour et t'insère les données sur les suivants, mais je ne suis pas sur que tu aies vraiment besoin de cela et qu'une simple requête UNION te suffira.

    A+

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 895
    Par défaut
    Ok merci

    Je vais tester cela demain

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 031
    Billets dans le blog
    45
    Par défaut
    vincent_merle, petit correctif, pas besoin du GROUP BY car il faut transformer

    ID [Cpte 1] [Cpte 2] [Cpte 3] [Cpte 4]
    1 2 10 9 9

    en

    ID Compte Montant
    1 [Cpte 1] 2
    1 [Cpte 2] 10
    1 [Cpte 3] 9
    1 [Cpte 4] 9

    d'où si on reprend ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT t.id, "cpte1" AS Compte, t.cpte1 AS Montant
    FROM tableTest t
    UNION
    SELECT t.id, "cpte2" AS Compte, t.cpte2 AS Montant
    FROM tableTest t
    ...

  5. #5
    Membre éclairé
    Homme Profil pro
    contrôle de gestion - data management
    Inscrit en
    Mai 2018
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : contrôle de gestion - data management
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2018
    Messages : 33
    Par défaut
    Bonjour, oui merci, effectivement l'agrégation est inutile dans ce cas. Bonne journée !

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 895
    Par défaut
    Merci

    Cela fonctionne

    J'aurais dû y penser car j'avais déjà utilisé des requêtes Union

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/04/2018, 02h12
  2. [AC-2007] Transposer une table access sur un fichier excel avec VBA
    Par christophe31 dans le forum VBA Access
    Réponses: 1
    Dernier message: 27/04/2010, 15h51
  3. transposer une table
    Par elimaur dans le forum SAS STAT
    Réponses: 3
    Dernier message: 15/04/2009, 13h48
  4. transposer une table. comment faire ?
    Par zeloutre dans le forum VBA Access
    Réponses: 4
    Dernier message: 18/09/2007, 17h39
  5. [DEB.] - Transposer une table SQL en XML SCHEMA ???
    Par oulahoup dans le forum Valider
    Réponses: 2
    Dernier message: 10/06/2003, 15h11

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