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 :

Requête concaténation de chaine


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 199
    Points : 70
    Points
    70
    Par défaut Requête concaténation de chaine
    Bonjour,

    Je dispose d'une table comme celle-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id      id_ref      libelle
    1       1            admin
    2       1            chef
    3       1            employé
    4       2            chef
    5       3            patron
    6       3            admin
    Je voudrais faire une requète qui me retourne le résultat suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id_ref           libelle_concat
    1                 admin, chef, employé
    2                 chef
    3                 patron, admin
    J'ai regardé du coté des requètes récursive mais je ne vois pas comment faire cette concaténation

    Quelqu'un pourrait-il me donner une piste pour ce genre d'agrégation ?

    Merci
    Sylvain

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Points : 1 668
    Points
    1 668
    Billets dans le blog
    8
    Par défaut
    Ci-dessous une solution, parmi d'autres, à votre problème.
    Cette solution fait appel aux fonctionnalités XML, natives, intégrées à SQL Server.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT T.id_ref 
            ,STUFF( ( SELECT ', ' + Z.libelle
                      FROM MaTable Z
                      WHERE Z.id_ref  = T.id_Ref
                      ORDER BY Z.id_ref
                      FOR XML PATH(''), TYPE
                     ).value('.' , 'VARCHAR(MAX)' ) ,1 ,2, '') AS libelle_concat
    FROM MaTable  T
    GROUP BY T.id_ref

    Résultat :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    id_ref	libelle_concat
    1	admin, chef, employé
    2	chef
    3	patron, admin

    A+
    "Une idée mal écrite est une idée fausse !"
    http://hamid-mira.blogspot.com

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 199
    Points : 70
    Points
    70
    Par défaut
    Nickel, il semble que c'est ce que je cherchais
    Par contre, j'ai du rajouter un distinct car j'avais autant de résultat pou un id_ref qu'il y avait d’occurrences
    J'ai du aussi enlever tous les null car il me renvoyais un certain nombre de ligne ou id_ref et libelle_concat était tous les deux null (je ne vois pas pourquoi)

    ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT distinct T.id_ref 
            ,STUFF( ( SELECT ', ' + Z.libelle
                      FROM MaTable Z
                      WHERE Z.id_ref  = T.id_Ref
                      ORDER BY Z.id_ref
                      FOR XML PATH(''), TYPE
                     ).value('.' , 'VARCHAR(MAX)' ) ,1 ,2, '') AS libelle_concat
    FROM MaTable  T
    GROUP BY T.id_ref
    where not id_ref is null
    Merci beaucoup pour votre aide et pour votre célérité !
    Sylo

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 199
    Points : 70
    Points
    70
    Par défaut
    Ok pour les nulls.
    Cela était lié à la structure de ma table
    Autant pour moi
    Merci

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

Discussions similaires

  1. Concaténation de chaine dans une requête sql
    Par mauriceletendu dans le forum R
    Réponses: 0
    Dernier message: 13/08/2014, 12h42
  2. [Requête] Concaténation et Tri
    Par Herman dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 30/03/2007, 09h41
  3. [Requête]Concaténation de 3 champs dans une table
    Par egg3774 dans le forum Access
    Réponses: 10
    Dernier message: 21/03/2007, 14h09
  4. Réponses: 1
    Dernier message: 25/04/2006, 17h06
  5. Concaténéation de chaine dans un group by
    Par Delphi-ne dans le forum Requêtes
    Réponses: 4
    Dernier message: 28/01/2006, 01h11

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