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 :

instruction PIVOT pour string


Sujet :

Langage SQL

  1. #1
    Membre actif Avatar de Poussy-Puce
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2005
    Messages : 357
    Points : 222
    Points
    222
    Par défaut instruction PIVOT pour string
    Bonjour à vous...

    J'ai une simple table, dont je connais le nombre de lignes que j'aimerais convertir en colonnes. Ce sont tous des string, est ce que l'instruction PIVOT est de mise? Si oui, j'ai du mal à convertir les exemples que je trouve à un résultat d'une simple colonne de string, peut-être quelqu'un peut m'indiquer?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    select [Title] from maTable
    where [key] in ('Key1', 'Key2', 'Key3')
     
    résultat : 
    Title
    -----------
    Title1
    Title2
    Title3
     
     
    Ce que je cherche à obtenir :
     
    Nom_colonne1  Nom_colonne2   Nom_colonne3
    ---------------------------------------------
    Title1            Title2               Title3
    Merci d'avance...
    Plus tu pédales moins vite, moins tu avances plus vite...
    La vie, c'est comme une bicyclette, il faut avancer pour ne pas perdre l'équilibre...

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Quel est votre SGBD ?

  3. #3
    Membre actif Avatar de Poussy-Puce
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2005
    Messages : 357
    Points : 222
    Points
    222
    Par défaut
    Microsoft SQL Server 2008
    Plus tu pédales moins vite, moins tu avances plus vite...
    La vie, c'est comme une bicyclette, il faut avancer pour ne pas perdre l'équilibre...

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Alors pas de soucis, vous pouvez utiliser la fonction PIVOT, voici un petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    declare @MaTable table
    (
      c1 varchar(6),
      c2 varchar(4)
    );
     
    insert into @MaTable (c1, c2) values ('Title1', 'Key3');
    insert into @MaTable (c1, c2) values ('Title2', 'Key1');
    insert into @MaTable (c1, c2) values ('Title3', 'Key2');
     
    select * from @MaTable;
     
    c1     c2
    ------ ----
    Title1 Key3
    Title2 Key1
    Title3 Key2
     
    select *
      from @MaTable
     pivot (max(c1) for c2 in (Key1, Key2, Key3)) as pvt;
     
    Key1   Key2   Key3
    ------ ------ ------
    Title2 Title3 Title1

  5. #5
    Membre actif Avatar de Poussy-Puce
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2005
    Messages : 357
    Points : 222
    Points
    222
    Par défaut
    Merci Waldar, ça fonctionne très bien. Permettez-moi une autre question étant donné que vous m'avez l'air à l'aise en la matière!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select * from                     
    (
    	select [Key] as c1, [Title] as c2 
    	from Resources
    	where [Key] in (
    	'zld_lblAdressNumber',
    	'zld_lblCity',
    	'zld_lblEmail'
    	)
    ) as tbl
    pivot 
    (
    	max(c1) for c2  IN (Key1, Key2, Key3)) as pvt
    Me retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Key1    Key2    Key3
    ------  ------ ------
    NULL    NULL    NULL
    Merci encore
    Plus tu pédales moins vite, moins tu avances plus vite...
    La vie, c'est comme une bicyclette, il faut avancer pour ne pas perdre l'équilibre...

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Il faut une corrélation entre la valeur des données choisies et celles dans le IN du PIVOT.
    Mais rien n'empêche de les aliaser au niveau du select.

    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT zld_lblAdressNumber as Key1,
           zld_lblCity         as Key2,
           zld_lblEmail        as Key3
      FROM                     
    (
    	SELECT [KEY] AS c1, [Title] AS c2 
    	FROM Resources
    	WHERE [KEY] IN (
    	'zld_lblAdressNumber',
    	'zld_lblCity',
    	'zld_lblEmail'
    	)
    ) AS tbl
    pivot 
    (
    	max(c1) FOR c2  IN (zld_lblAdressNumber, zld_lblCity, zld_lblEmail)) AS pvt;

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

Discussions similaires

  1. Mettre une pause dans un programme
    Par PNL dans le forum Général Java
    Réponses: 12
    Dernier message: 28/01/2016, 00h54
  2. Utilisation de tables pivots pour générer des graphes
    Par acraenin dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/10/2007, 11h19
  3. [ORACLE 8i] ORA-01036 / oci bind by name pour string
    Par mrfred dans le forum Interfaces de programmation
    Réponses: 7
    Dernier message: 02/08/2007, 12h11
  4. Contrainte pour String et Code postal
    Par hola150 dans le forum Oracle
    Réponses: 8
    Dernier message: 10/04/2007, 09h54
  5. instruction valable pour une ligne d'une table
    Par Skizo dans le forum Access
    Réponses: 2
    Dernier message: 18/05/2006, 15h51

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