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

Développement SQL Server Discussion :

Déployer les valeurs du champ 2 dans des colonnes 1,2,3, etc en regroupant avec le champ 1


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Juillet 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2019
    Messages : 7
    Par défaut Déployer les valeurs du champ 2 dans des colonnes 1,2,3, etc en regroupant avec le champ 1
    bonjour,
    je souhaite déployer les valeurs du champs2 dans des colonnes 1,2,3, etc... en regroupant avec le champs1
    (sql serveur 2008)

    Pouvez vous m'aider
    bien cordialement

    exemple

    source
    cod num_devis
    A 200119
    B 300001
    B 200065
    C 200287
    D 201079
    D 200615
    D 300034
    E 300011
    E 200008
    E 200031
    E 200022
    E 200024
    F 200014




    resultat

    cod devis 1 devis 2 devis 3 devis 4 devis 5
    A 200119
    B 300001 200065
    C 200287
    D 201079 200615 300034
    E 300011 200008 200031 200022 200024
    F 200014
    Fichiers attachés Fichiers attachés

  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 999
    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 999
    Billets dans le blog
    6
    Par défaut
    Avec les données suivantes :
    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
    CREATE TABLE T_SOURCE (cod CHAR(1), num_devis INT);
    GO
    INSERT INTO T_SOURCE VALUES 
    ('A', 200119),
    ('B', 300001),
    ('B', 200065),
    ('C', 200287),
    ('D', 201079),
    ('D', 200615),
    ('D', 300034),
    ('E', 300011),
    ('E', 200008),
    ('E', 200031),
    ('E', 200022),
    ('E', 200024),
    ('F', 200014);
    GO
    La solution :

    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
    WITH T AS
    (
    SELECT *, ROW_NUMBER() OVER(PARTITION BY cod ORDER BY num_devis) AS RN
    FROM   T_SOURCE
    )
    SELECT T0.cod, T0.num_devis AS DEVIS_0,
                   T1.num_devis AS DEVIS_1, 
                   T2.num_devis AS DEVIS_2, 
                   T3.num_devis AS DEVIS_3, 
                   T4.num_devis AS DEVIS_4, 
                   T5.num_devis AS DEVIS_5
    FROM   T AS T0
           LEFT OUTER JOIN T AS T1
              ON T0.cod = T1.cod AND T1.RN = 2
           LEFT OUTER JOIN T AS T2
              ON T0.cod = T2.cod AND T2.RN = 3
           LEFT OUTER JOIN T AS T3
              ON T0.cod = T3.cod AND T3.RN = 4
           LEFT OUTER JOIN T AS T4
              ON T0.cod = T4.cod AND T4.RN = 5
           LEFT OUTER JOIN T AS T5
              ON T0.cod = T5.cod AND T5.RN = 6
    WHERE  T0.RN = 1
    Deux choses :
    1) faire de la cosmétique avec un SGBDR est toujours quelque chose de stupide. Ceci est à faire côté applicatif !
    2) je vous ai mis -1 car vous n'avez pas respecté la charte de postage nous obligeant à faire le travail à votre place. À l'avenir veuillez respecter la charte de postage....

    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/ * * * * *

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Bonjour,

    Pourquoi ne pas faire un PIVOT?

  4. #4
    Membre habitué
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Juillet 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2019
    Messages : 7
    Par défaut
    bonjour,
    pouvez vous me montrer comment faire avec pivot ?
    merci
    bien cordialement

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    with v as
    (select row_number() over (partition by cod order by num_devis) rn,
            cod,
            num_devis
    from t)
    select *
    from v
    pivot (max(num_devis) for rn in (1 as devis1, 2 as devis2, 3 as devis3, 4 as devis4, 5 as devis5))
    order by cod;

  6. #6
    Membre habitué
    Homme Profil pro
    Responsable d'un système d'information métier
    Inscrit en
    Juillet 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Responsable d'un système d'information métier
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2019
    Messages : 7
    Par défaut
    bonjour,
    avec la table t_source créee précédemment , je n'arrive pas a faire fonctionner la rq !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    with v as
    (select row_number() over (partition by cod order by num_devis) rn,cod,num_devis
    from t_source)
    select *
    from v
    pivot (max(num_devis) for rn in (1 as devis1, 2 as devis2, 3 as devis3, 4 as devis4, 5 as devis5))
    order by cod;

    Msg*102, Niveau*15, État*1, Ligne*6
    Syntaxe incorrecte vers '1'.
    avez vous une idée?
    Merci

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/09/2013, 14h05
  2. Réponses: 2
    Dernier message: 12/08/2012, 18h43
  3. Réponses: 4
    Dernier message: 26/01/2010, 14h32
  4. Réponses: 5
    Dernier message: 15/09/2006, 16h13
  5. Afficher les coordonnées d'un layer dans des champs texte
    Par renaud26 dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 15/08/2006, 13h53

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