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 :

Aide SQL pour arborescence ? [2008R2]


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 41
    Points : 35
    Points
    35
    Par défaut Aide SQL pour arborescence ?
    Bonjour,
    j'arrive pas a trouver un moyen de créer une requête SQL pour pourvoir voir toutes les donnes deux ces deux table en 1 seul requête.

    table 1 : nomenclature_service
    id_service
    nom
    niveau (1,2,3,4)
    id_service_parent
    code_responsable

    1 représente le niveau le plus haut et 4 le niveau le plus bas

    table 2 : responsable
    code_reponsable
    nom_responsable

    je que je voudrais faire c'est afficher pour chaque responsable l'arborescence du service qu'il s'occupe.
    exemple :
    responsable niveau 1 niveau 2 niveau 3 niveau 4
    toto SAV Hotline Developpement Web
    Dupond Developpement Logiciel
    George Developpement


    J'ai créer une requête SQL qui me sort bien les informations que je veux mais le problème c'est qu'il y a 32 case when dans le sélect.
    J'ai aussi regardé du coté des CTE ( pas sur du nom) mais j'ai pas bien compris le fonctionnement.

    Est ce que vous pouvez m'aiguiller sur la bonne piste afin que je puisse résoudre ce problème ?

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 101
    Points : 187
    Points
    187
    Par défaut
    Poster votre requête, afin que l'on puisse vous aidez, ainsi qu'un petit jeu d'essai et le résultat attendu.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 41
    Points : 35
    Points
    35
    Par défaut
    Code SQL : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    select R.nom,R.code_reponsable ,
    case when SERV1.niveau = 1 then SERV1.nom else
    	case when SERV2.Niveau = 1 then SERV2.nom else
    		case when  SERV3.Niveau = 1 then SERV3.NOM ELSE
    			case when SERV4.Niveau = 1 then SERV4.nom else '' end
    		end  
    	end  
    end as niv_1, 
    case when SERV1.niveau = 1 then SERV1.id_service else  
    	case when SERV2.Niveau = 1 then SERV2.id_service else 
    		case when  SERV3.Niveau = 1 then SERV3.id_service ELSE
    			case when SERV4.Niveau = 1 then SERV4.id_service else '' end
    		end 
    	end  
    end as id_niv_1,  
    case when SERV1.niveau = 2 then SERV1.nom else  
    	case when SERV2.Niveau = 2 then SERV2.nom else 
    		case when  SERV3.Niveau = 2 then SERV3.NOM ELSE 
    			case when SERV4.Niveau = 2 then SERV4.nom else '' end 
    		end 
    	end  
    end as niv_2,
    case when SERV1.niveau = 2 then SERV1.id_service else 
    	case when SERV2.Niveau = 2 then SERV2.id_service else
    		case when  SERV3.Niveau = 2 then SERV3.id_service ELSE
    			case when SERV4.Niveau = 2 then SERV4.id_service else '' end
    		end 
    	end  
    end as id_niv_2,
    case when SERV1.niveau = 3 then SERV1.nom else
    	case when SERV2.Niveau = 3 then SERV2.nom else
    		case when  SERV3.Niveau = 3 then SERV3.NOM ELSE  
    			case when SERV4.Niveau = 3 then SERV4.nom else '' end
    		end  
    	end
    end as niv_3,
    case when SERV1.niveau = 3 then SERV1.id_service else 
    	 case when SERV2.Niveau = 3 then SERV2.id_service else
    		 case when  SERV3.Niveau = 3 then SERV3.id_service ELSE
    			 case when SERV4.Niveau = 3 then SERV4.id_service else '' end
    		end
    	 end  
    end as id_niv_3,
    case when SERV1.niveau = 4 then SERV1.nom else  
    	case when SERV2.Niveau = 4 then SERV2.nom else 
    		case when  SERV3.Niveau = 4 then SERV3.NOM ELSE 
    			case when SERV4.Niveau = 4 then SERV4.nom else '' end
    		end 
    	end 
    end as niv_4, 
    case when SERV1.niveau = 4 then SERV1.id_service else  
    	case when SERV2.Niveau = 4 then SERV2.id_service else
    		case when  SERV3.Niveau = 4 then SERV3.id_service ELSE
    			case when SERV4.Niveau = 4 then SERV4.id_service else '' end
    		end
    	end  
    end as id_niv_4
    from responsable R
    outer apply ( select nom , id_service , niveau , id_service_parent from nomenclature_service NS where id_couleur = 15 and code_responsable =R.code_reponsable ) SERV1
    outer apply ( select nom , id_service , niveau , id_service_parent from nomenclature_service NS where id_couleur = 15 and NS.id_service = SERV1.id_service_parent  ) SERV2  
    outer apply ( select nom , id_service , niveau , id_service_parent from nomenclature_service NS where id_couleur = 15 and NS.id_service = SERV2.id_service_parent ) SERV3
    outer apply ( select nom , id_service , niveau , id_service_parent from nomenclature_service NS where id_couleur = 15 and PF.id_service = SERV3.id_service_parent ) SERV4  
    order by R.nom , niv_1 ,niv_2,niv_3,niv_4


    Le résultat que je voudrais correspond a l'exemple que j'ai mis.

    Responsable
    code_reponsable nom_responsable
    1 toto
    2 george
    3 dupond
    4 Durand
    5 Lina
    5 Annie

    Nomenclature_service
    id_service nom niveau id_service_parent code_responsable
    1 SAV 1 0 0
    2 Developpement 1 0 2
    3 Logiciel 2 2 3
    4 Hotline 2 1 0
    5 Developpement 3 4 0
    6 Web 4 5 1

  4. #4
    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
    Points : 13 092
    Points
    13 092
    Par défaut
    essayez comme ceci :

    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
     
    WITH Arbo AS (
        SELECT R.Nom_responsable , S.nom AS Service, 	S.niveau, 	S.id_service_parent
        FROM Nomenclature_service S
        INNER JOIN Responsable R
    	   ON  R.code_responsable = S.code_responsable
        UNION ALL
        SELECT  A.nom_responsable, ns.nom, ns.niveau, ns.id_service_parent
        FROM Arbo A
        INNER JOIN Nomenclature_service ns
    	   ON ns.id_service = A.id_service_parent
    )
    SELECT 
    		  Nom_responsable
    	   ,	  MAX(CASE WHEN niveau = 1 THEN service END) as niveau1
    	   ,	  MAX(CASE WHEN niveau = 2 THEN service END) as niveau2
    	   ,	  MAX(CASE WHEN niveau = 3 THEN service END) as niveau3
    	   ,	  MAX(CASE WHEN niveau = 4 THEN service END) as niveau4
    FROM Arbo 
    GROUP BY Nom_responsable

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 41
    Points : 35
    Points
    35
    Par défaut
    Merci à vous, la réponse que m'a fourni : aieeeuuuuu marche parfaitement.

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

Discussions similaires

  1. Requête SQL pour retrouver toute une arborescence
    Par 6116d dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/11/2014, 09h36
  2. Aide conceptuelle pour sql serveur/excel
    Par Tutitoto dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/07/2010, 14h42
  3. Aide pour script sql pour isql
    Par fabpan dans le forum SQL
    Réponses: 22
    Dernier message: 06/07/2009, 09h01
  4. aide en sql pour contraintes de clé etrangère
    Par nguex dans le forum Windows
    Réponses: 2
    Dernier message: 25/04/2007, 14h07

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