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

Langage SQL Discussion :

Transformer une colonne en une ligne


Sujet :

Langage SQL

  1. #1
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut Transformer une colonne en une ligne
    Bonjour,

    Après avoir recherché sur plusieurs sites sur internet, je n'ai pas trouvé mon bonheur sur cette question, je tiens à m'excuser si je suis passé à côté.
    J'aimerais transformer une colonne (une seule colonne) en une ligne (une seule ligne) avec une requête SQL.
    Par exemple:

    ------------------- Colonne 1 -------------------
    Tomate
    Poivron
    256
    Coucou 12
    Coucaracha

    Et je voudrais transformer la table ci-dessus en:

    --- Colonne 1 --- --- Colonne 2 --- --- Colonne 3 --- --- Colonne 4 --- --- Colonne 5 ---
    Tomate Poivron 256 Coucou 12 Coucaracha

    Je précise que le nom des colonnes n'a strictement aucune importance pour moi, je veux juste mettre ma colonne en ligne ^^.
    J'espère que vous pourrez m'aider!

    Bonne journée à vous! ^^

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    il faut utiliser une requete pivot, il y a des exemples dans ce forum (je te laisse chercher )
    voici un lien sinon avec un exemple simple http://www.expert-only.com/tutoriels...-en-sql-server

  3. #3
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut
    J'avais connaissance de la méthode Pivot, mais le problème est que le nombre de lignes dans le tableau à transformer est variable, donc si le tableau s'agrandit cela risquerait de poser problème? Car il faut définir à l'avance j'ai l'impression les lignes qu'on veut bouger

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si c'est pour présenter les résultats à l'utilisateur dans une application, faites l'opération dans l'application.
    Sinon, quel est le but de la manoeuvre ?
    Quand vous aurez une table de plusieurs milliers de lignes, vous explorerez un tableau de plusieurs milliers de colonnes ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut
    Alors, je vais expliquer plus en détail ce que je dois faire: ^^

    J'ai une table de x lignes et y colonnes sur un serveur Microsoft SQL Server. Grâce à une requête SQL avec VBA sous Excel 2010, je récupère le contenu de la table et je le recopie dans une feuille excel. Cependant, je n'ai pas le nom des colonnes dans la table lorsque je récupère les données.
    Du coup mon idée était de récupérer le nom des colonnes grâce à une requête comme celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COLUMN_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'NOM_DE_LA_TABLE'
    (le résultat de la requête ci-dessus donne l'équivalent du premier tableau au dessus, donc chaque élément est en réalité le nom des colonnes dans la table ^^)

    Grâce à cette requête je récupére le nom des colonnes de ma table, mais ils sont stockés sur la même colonne! Et ce que je voulais faire c'est transformer cette colonne en ligne.

    C'est vrai que c'est un peu tordu, mais si vous avez une solution plus efficace je suis preneur .

    L'idée est donc d'avoir sur une feuille excel à la fois les données mais aussi le nom des colonnes. ^^

  6. #6
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut
    En gros, avec une requête SQL comme celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT Les_Poireaux, Machine_A_Laver
    FROM MA_TABLE

    Je n'obtienne pas sous excel (en VBA) quelque chose comme ça:

    6 15
    9 896
    96 17
    58 2569


    Mais plutôt quelque chose comme ça:
    --- Les_Poireaux --- --- Machine_A_Laver ---
    6 15
    9 896
    96 17
    58 2569

    Et ca je ne vois absolument pas comment procéder pour y arriver.^^

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par ChipsAlaMenthe Voir le message
    Alors, je vais expliquer plus en détail ce que je dois faire: ^^

    J'ai une table de x lignes et y colonnes sur un serveur Microsoft SQL Server. Grâce à une requête SQL avec VBA sous Excel 2010, je récupère le contenu de la table et je le recopie dans une feuille excel. Cependant, je n'ai pas le nom des colonnes dans la table lorsque je récupère les données.
    Pour ce cas d'utilisation, il me semble beaucoup plus simple de procéder ainsi :
    - Créer une ligne dans excel avec les noms de colonnes "en dur"
    - Créer une connexion ODBC vers la base de donnée
    - Charger directement les colonnes via cette connexion dans excel à partir de la ligne 2

  8. #8
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut
    C'est vrai que ce serait sûrement plus simple, mais ma fonction ne serait plus générique, j'utilise plusieurs tables différentes avec toutes des longueurs de tableaux différents. Elles utilisent cependant toutes la même fonction, c'est pour cela que je veux que les noms sont générés automatiquement.
    Ce que je veux c'est faire le moins de choses possible en "dur", l'application sera d'autant plus portable grâce à cela ^^.

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    En ce cas il est possible de reprendre le principe (ca devient quand même un peu usine a gaz mais bon) :
    - première requete depuis excel avec un lien vers la table des colonnes (sur DB2 : SYSIBM.SYSCOLUMNS) pour récupérer les noms de colonnes
    - deuxième requête depuis excel avec un lien vers la table des données
    - assemblage des 2 onglets (il me semble qu'on ne peut pas avoir 2 sources sur un même onglet)

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Je suis étonné qu'il n'existe pas d'option dans Excel pour récupérer les entêtes de colonnes automatiquement. Je n'ai pas fait ce genre de manip depuis un moment (surtout sous Excel vu que j'ai quitté la planète Microsoft depuis plusieurs années) mais de mémoire il me semble que ça existe en standard ce genre de chose.

    Sinon, si vous faites un programme générique (en VBA peut-être ?) pour interroger n'importe quelle table, commencez par la requête sur INFORMATION_SCHEMA, traitez le résultat en VBA pour mettre les en-tête de colonnes puis importez les données à partir de la ligne 2 de la feuille.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Je suis étonné qu'il n'existe pas d'option dans Excel pour récupérer les entêtes de colonnes automatiquement. Je n'ai pas fait ce genre de manip depuis un moment (surtout sous Excel vu que j'ai quitté la planète Microsoft depuis plusieurs années) mais de mémoire il me semble que ça existe en standard ce genre de chose.

    Sinon, si vous faites un programme générique (en VBA peut-être ?) pour interroger n'importe quelle table, commencez par la requête sur INFORMATION_SCHEMA, traitez le résultat en VBA pour mettre les en-tête de colonnes puis importez les données à partir de la ligne 2 de la feuille.
    Pour autant que je sache, Excel propose en standard de transformer la 1ere ligne en ligne titres, pas d'ajouter une ligne titres (comment pourrait il deviner le contenu ?)

  12. #12
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ben si on lui dit d'interroger telle table et de récupérer telles colonnes, il devrait être capable de mettre les noms de colonnes en première ligne, je trouve.
    Encore une fois, ça fait bien longtemps que je n'ai eu à faire ce genre de truc, que ce soit avec LibreOffice ou avec Excel.
    Le seul truc que je fais de temps en temps, c'est de l'export de données MySQL ou Oracle en CSV ou import de fichier CSV dans LibreOffice. Là effectivement est proposé de transformer la première ligne de données en entête de colonnes.

    Il m'arrive aussi d'exporter d'Oracle ou de MySQL directement en format Excel, à l'aide respectivement de SQL Developer ou phpMyAdmin.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  13. #13
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut
    Re-Bonjour tout le monde.

    J'ai trouvé la solution à mon problème.
    Je cherchais trop compliqué dès le départ, de plus la solution n'aurait pas marché si l'utilisateur ne demandait pas toutes les colonnes de la table.
    La solution était de passer par ADODB.Fields en VBA et de le combiner avec ADODB.recordSet. Ensuite après avoir ouvert la connexion avec RecordSet (Et après bien sûr avoir ouvert une connexion avec ADODB.Connection), il faut faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ' On recupere les champs
    Set objFields = rsPubs.Fields
     
     ' Ecriture des champs dans la feuille excel
    For intLoop = 0 To (objFields.Count - 1)
        Worksheets(numeroPage).Range(ConvertToLetter(intLoop + 1) & "1") = objFields.Item(intLoop).Name
    Next
    De cette façon les noms apparaissent au dessus des tables avec une seule requête.

    Je vous remercie tout de même d'avoir pris le temps de m'aider!

  14. #14
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 557
    Points
    38 557
    Billets dans le blog
    9
    Par défaut
    Et merci d'avoir publié la solution, bien qu'il ne s'agisse pas d'une solution SQL

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

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. [WD16] Récupérer la valeur d'une colonne d'une table d'une ligne précise
    Par elghers_hocine dans le forum WinDev
    Réponses: 16
    Dernier message: 06/05/2011, 18h11
  3. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  4. Réponses: 4
    Dernier message: 31/10/2007, 20h27
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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