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 :

concatenation sur hierarchie


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 126
    Par défaut concatenation sur hierarchie
    Bonjour,

    je tourne en rond sur une requête où je dois récupérer une liste de code manager par rapport à un ensemble d'utilisateurs.

    Je m'explique,

    j'ai une table qui me renvoie ce genre de tableau


    empid empalias hr_id
    16 oo 12
    15 nn 13
    13 mmm 12
    12 pp 11
    11 kkk null
    6 jj 2
    5 iii 2
    4 hhh 2
    3 gg 2
    2 ff null
    10 ee 9
    9 dddd 8
    8 cccc 7
    7 bbbb 1
    1 aaaa null


    je voudrais au final récupérer une liste de se style

    empid empalias path
    1 aaaa null
    7 empalias 1
    8 cccc 7,1
    9 dddd 8,7,1
    10 ee 9,8,7,1
    2 ff null
    3 gg 2
    4 hhh 3,2
    5 iii 4,3,2
    6 jj 5,4,3,2
    11 kkk null
    12 pp 11
    13 mmm 12,11
    15 nn 13,12,11
    16 oo 12,11


    J'ai essayé d'utiliser la fonction for xml path(''), mais je n'arrive pas à obtenir ce que je veux.

    merci d'avance.

    Cordialement,
    Xavier

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    Faites une requête récursive

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 36
    Par défaut
    Bonjour,

    Cette requête devrait répondre à votre besoin même si au niveau de votre exemple je ne comprends pas très bien le fonctionnement des empid 4, 5, 6:
    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
     
    WITH tree (data, Id, Niveau, idori, pathstr) AS (
    SELECT empalias, empid, 0, empid, 
    CASE WHEN CAST(COALESCE(hr_id, -1) AS VARCHAR(MAX)) = '-1' THEN '' ELSE CAST(COALESCE(hr_id, -1) AS VARCHAR(MAX)) END
    FROM   Table_Test  
    WHERE  hr_id IS NULL  
    UNION ALL  
    SELECT empalias, empid, T.Niveau + 1, T.idori, 
    CASE WHEN CAST(COALESCE(hr_id, -1) AS VARCHAR(MAX)) = '-1' THEN '' ELSE CAST(COALESCE(hr_id, -1) AS VARCHAR(MAX)) END + ',' + T.pathstr   
    FROM   Table_Test V  
    INNER JOIN tree T  
    ON T.id = V.hr_id)
     
    SELECT id AS empid, data AS empalias, 
    CASE WHEN LEN(pathstr) > 1 THEN LEFT(pathstr, LEN(pathstr) - 1) ELSE 'null' END AS path FROM tree
    Comme vous l'a indiqué aieeeuuuuu, c'est une requête récursive.

    Cordialement.

Discussions similaires

  1. concatenation sur etat access dans etiquette
    Par gui-llaume dans le forum IHM
    Réponses: 9
    Dernier message: 16/03/2018, 13h56
  2. [AC-2007] Concatenation sur liste deroulante
    Par johndi dans le forum VBA Access
    Réponses: 4
    Dernier message: 09/04/2013, 17h32
  3. Concatenation sur identifiants
    Par AzelRoth dans le forum Développement
    Réponses: 2
    Dernier message: 23/09/2009, 14h13
  4. Binding sur hierarchie non complète
    Par adrienfehr dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 13/03/2009, 15h32
  5. Réponses: 9
    Dernier message: 22/02/2007, 14h51

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