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 MySQL Discussion :

Transposer une table ?


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 487
    Par défaut Transposer une table ?
    Bonjour à tous,

    je souhaiterais "normaliser" une table, c'est à dire passer les colonnes en lignes. Exemple:

    table source:
    id | Colonne 1 | Colonne 2 | Colonne 3 | ... | Colonne n
    1 | blabla1 | toto1 | titi1 | tata1 | ... | tete1
    2 | blabla2 | toto2 | titi2 | tata2 | ... | tete2
    3 | blabla3 | toto3 | titi3 | tata3 | ... | tete3

    table cible:
    id | Champ normalisé | Valeur
    1 | Colonne 1 | blabla1
    1 | Colonne 2 | titi1
    1 | Colonne 3 | tata1
    1 | Colonne 4 | tete1
    2 | Colonne 1 | blabla2
    2 | Colonne 2 | titi2
    2 | Colonne 3 | tata2
    2 | Colonne 4 | tete2

    j'ai cherché sur Google et j'ai trouvé la solution du union. dans l'exemple ci-dessus ca donnerait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id, Colonne 1 AS Champ normalisé FROM table
    UNION
    SELECT id, Colonne 2 FROM table
    -- etc.
    par contre dans la mesure où je ne connais pas d'avance le nombre de colonnes de la table, je doute que cela soit possible d'utiliser cette méthode...

    une idée ?

    Merci par avance!

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour,

    tu peux utiliser un script php par exemple te retournant les colonnes de ta table :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $table = 'unNomDetable';
    $tab = array();
     
    $result= mysql_query('describe ' .$mytable);
     
    while ($row = mysql_fetch_assoc($result))
        $tab[] = $row['Field'];

    En sortie de boucle, le tableau $tab contient donc la liste de tes champs, reste plus qu'a générer un UNION dynamique avec

  3. #3
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 487
    Par défaut
    Bonjour Madfrix,

    merci pour ta réponse,

    en fait j'aurais besoin d'une solution pur SQL dans la mesure où j'utilise un ETL pour lancer ma requête sur la base MySQL.

    s'il n'y a pas de solution pur SQL je passerai effectivement par du code (mais c'est moins bien pour des raisons de performances)

    A+

  4. #4
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Alors désolé je vois pas comment faire cela sinon

    Peut être via une procédure stockée...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par laloune Voir le message
    s'il n'y a pas de solution pur SQL je passerai effectivement par du code (mais c'est moins bien pour des raisons de performances)
    Il faut se méfier de ce genre d'apriori.
    Il y a des tas de choses qu'une base de données SQL fera toujours de manière beaucoup moins efficace qu'un programme ad-hoc.

    De manière générale, le SQL est sensé être efficace pour tous ce qui retourne d'une logique relationnelle.
    Là on est typiquement dans un besoin qui sort de cette logique et pour lequel il faudra faire de la gymnastique pour parvenir à trouver une solution SQL.

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Citation Envoyé par laloune Voir le message
    par contre dans la mesure où je ne connais pas d'avance le nombre de colonnes de la table, je doute que cela soit possible d'utiliser cette méthode...
    Si tu ne connais pas les colonnes à l'avance, alors ce n'est pas possible par le biais d'une requête de ce type.
    Il faut, éventuellement, essayer de passer par des fonctions utilisateurs, mais MySQL n'est pas très avancé en la matière.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  7. #7
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 487
    Par défaut
    ok merci beaucoup, je vais chercher par là.

Discussions similaires

  1. Transposer une table (colonne -> ligne)
    Par twixi dans le forum SQL
    Réponses: 8
    Dernier message: 16/06/2011, 18h04
  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