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 :

[T-SQL] Convertir des lignes en colonne


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 71
    Points : 102
    Points
    102
    Par défaut [T-SQL] Convertir des lignes en colonne
    Bonjour,

    Voici mon souci, j'aimerais convertir en colonne les lignes contenues dans une table ou requete.
    Un exemple vaut tout les discours, le voici :

    Table origine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    --------------------------
    | user | code | valeur   |
    --------------------------
    | 1    | 1    | a        |
    | 1    | 2    | b        |
    | 2    | 1    | c        |
    --------------------------
    résultat attendu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    --------------------------
    | user | 1      | 2      |
    --------------------------
    | 1    | a      | b      |
    | 2    | c      | NULL   |
    --------------------------
    Conclusion, la table est composé du user et des colonnes issues en quelque sorte d'un select distinct code from table_origine. et on remplit la ligne avec les valeurs voulues.
    Pour le moment je pense à créé une table tempo en créant la liste des colonnes avec un select @col = @col + code + ', ' from table_origine.
    Puis parcourir la table avec un order sur user, tant qu'on est avec le meme user, je concatene le nom de la colonne dans @col_field avec une virgule, et de meme pour les valeurs dans @col_values et dès qu'on change de user, je fais un insert into table_final (@col_field) values (@col_values).

    Voilà, si vous avez plus simple, je suis preneur.

    Pour ceux qui ont encore du temps à me consacrer, la deuxieme étapes est encore plus difficile, puisqu'en fait les codes sont groupés par categories et j'aimerais un truc qui finalement sera:

    Table origine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ----------------------------------
    | user  | code | valeur | cat    |
    ----------------------------------
    | 1     | 1    | a      |  cat1  |
    | 1     | 2    | b      |  cat1  |
    | 1     | 3    | c      |  cat2  |
    | 2     | 1    | d      |  cat1  |
    | 2     | 3    | e      |  cat2  |
    ----------------------------------
    résultat attendu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    -------------------------------------------
    | user | cat1  | 1  | 2    | cat2  | 3    |
    -------------------------------------------
    | 1    | x     | a  | b    | x     | c    |
    | 2    | x     | d  | NULL | x     | e    |
    -------------------------------------------
    Les x étant un caractère arbitraire mais nécessaire.

    Et là, le souci c'est que je pense que mon idée de cursor est encore faisable en imbriquant un nouveau mais, niveau performance, ca doit faire ouille.

    Voilà, je suis long donc j'espere que vous aurez pris la peine de lire ce post. Si détail(s) il(s) manque(nt), je peux faire deux fois plus long (si si c'est possible

    cortex

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Vous n'avez pas indiqué le SGBDR avec lequel vous voulez faire ceci.
    Si c'est MS SQL Server 2005 utilisez l'opérateur PIVOT. Lisez le point 1.8
    de l'article que j'ai écrit : http://sqlpro.developpez.com/SQL_Server_2K5/N1.php

    Cepandant ce genre de chose n'est pas à faire au niveau de SQL. Lisez la remarque que j'ai écrite : http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L9

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Requête SQL mettre des ligne dans des colonnes
    Par karim66 dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/02/2012, 20h57
  2. Requête SQL, transformer des lignes en colonne
    Par gadget2 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/11/2010, 20h50
  3. SQL : Regrouper des lignes dans une seule colonne
    Par manoir62 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/02/2009, 18h06
  4. Réponses: 1
    Dernier message: 01/08/2008, 19h51
  5. Réponses: 2
    Dernier message: 01/06/2004, 15h08

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