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 :

Transposer n premières valeurs dans une colonne vers n colonnes dans une autre table .


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Transposer n premières valeurs dans une colonne vers n colonnes dans une autre table .
    Bonjour à tous ,
    J'expose mon problème :

    J'ai une table sous mssql 2008r2 sous forme :

    RAID ID : 10
    RAID TYPE : R5
    NBR DISK : 10
    RAID ID : 20
    RAID TYPE : R3
    NBR DISK : 15
    RAID ID : 30
    RAID TYPE : R5
    NBR DISK : 3

    Format souhaité :

    RAID ID.RAID TYPE.NBR DISK
    10 R5 10
    20 R3 30
    30 R5 3

    C'est à dire , insert les 3 premières lignes dans 3 colonnes différentes dans une autre table . l'autre table est déjà crée
    Merci pour vos aides

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Dans la première table, les lignes sont regroupées par 3 avec un même identifiant ?

    Si c'est pas le cas, commencez-par faire ça, sinon, impossible à faire.

    En effet comment savoir que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    RAID ID : 10
    RAID TYPE : R5
    NBR DISK : 10
    RAID ID : 20
    RAID TYPE : R3
    NBR DISK : 15
    RAID ID : 30
    RAID TYPE : R5
    NBR DISK : 3
    Doit être traduit en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    10 R5 10
    20 R3 30
    30 R5 3
    Et non :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    10 R3 3
    20 R5 10
    30 R5 30
    ???
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Si vraiment vous avez un "id" auto-incrément sans trou et que les données sont toujours inscrites dans le même ordre :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    insert into nouvelle (id, type, nb)
    select t1.val, t2.val, t3.val
    from ancienne t1
    inner join ancienne t2 on t2.id = t1.id + 1
    inner join ancienne t3 on t3.id = t2.id + 3
    where t1.nom = 'RAID ID';

    (m'attendez-pas, je vais vomir)

    Et la solution propre, si vous avez un id commun à chaque triplet :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    insert into nouvelle (id, type, nb)
    select t1.val, t2.val, t3.val
    from ancienne t1
    inner join ancienne t2 on t2.id = t1.id and t2.nom = 'RAID TYPE'
    inner join ancienne t3 on t3.id = t2.id and t3.nom = 'NB DISK'
    where t1.nom = 'RAID ID';
    On ne jouit bien que de ce qu’on partage.

  4. #4
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Si l'hypothese de StringBuilder est vrai, on peut formuler larequete comme suite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    insert into nouvelle
    SELECT t1.val "RAID ID",t2.val "RAID TYPE",t3.val "NBR DISK"
    FROM ancienne t1
    left JOIN ancienne t2 ON t1.id = t2.id-1
    left JOIN ancienne t3 ON t1.id = t3.id-2
    where t1.val like 'RAID ID%'
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/01/2013, 09h04
  2. Réponses: 38
    Dernier message: 24/04/2012, 22h09
  3. Réponses: 8
    Dernier message: 10/04/2009, 09h57
  4. 3 colonnes vers 1 colonne unique
    Par arlo13 dans le forum Excel
    Réponses: 9
    Dernier message: 14/02/2008, 18h33

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