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

  1. #1
    Futur Membre du Club
    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 : 49
    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
    Points : 6
    Points
    6
    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 770
    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 770
    Points : 52 726
    Points
    52 726
    Billets dans le blog
    5
    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 chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    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 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Pourquoi ne pas faire un PIVOT?

  4. #4
    Futur Membre du Club
    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 : 49
    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
    Points : 6
    Points
    6
    Par défaut
    bonjour,
    pouvez vous me montrer comment faire avec pivot ?
    merci
    bien cordialement

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    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 138
    Points : 1 918
    Points
    1 918
    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
    Futur Membre du Club
    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 : 49
    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
    Points : 6
    Points
    6
    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

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    De toute façon la question est y aura-t-il uniquement jusque 5 devis à afficher ?

    Si non, le seul moyen sera donc de générer la requête dynamiquement après avoir récupéré le nombre de devis max ou alors de pivoter le résultat dans le langage client.

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    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 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Je suppose que le PIVOT n'est géré qu'à partir d'une certaine version sous SQL Server. Tu dis être sous SQL Server 2008, c'est certainement trop vieux.

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