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 :

SVP j'ai besoin d'aide pour une requete.


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 47
    Par défaut SVP j'ai besoin d'aide pour une requete.
    Bonjour,j'ai deux tables Titres et sommaire dans une base de donnée SQL Server 2005.(J'ai dû ajouter les ';' pour séparer les colonnes et faciliter la lecture)

    Titres
    ---------------------------------------------------------
    TitreId ; PrecedentId; Niveau ; Libelle
    10 ; 0 ; 1 ; Plantes
    13 ; 10 ; 2 ; Fleurs
    22 ; 13 ; 1 ; Animaux
    24 ; 22 ; 2 ; Chiens


    Articles
    ----------------------------------------------------------
    ArticleId; TitreId; Libelle; Ordre
    1 ; 13 ; Ancolie ; 2
    2 ; 13 ; Roses ; 1
    3 ; 24 ; Boxer ; 1
    4 ; 24 ; Berger A. ; 2


    Mon objectif est de créer Dynamiquement la table ou Vue Titre_Articles

    Titre_Articles
    ----------------------------------------------------------
    Id; Numero Libelle
    1 ; 1 ; Plantes
    2 ; 1.1 ; Fleurs
    3 ; 1.1.1 ; Roses
    4 ; 1.1.2 ; Ancolie
    5 ; 2 ; Animaux
    6 ; 2.1 ; Chiens
    7 ; 2.1.1 ; Boxer
    8 ; 2.1.2 ; Berger A.

    SVP sauriez vous comment faire?
    Merci

  2. #2
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Déjà ceci te permet de répondre au besoin, sauf la numérotation 1.1.1
    Pour cette numérotation, as-tu besoin de le faire selon une profondeur inconnue, ou sais-tu que ce sera toujours 3 niveaux ?

    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
    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
     
    CREATE TABLE #Titres (
    	TitreId int,
    	PrecedentId int,
    	Niveau tinyint,
    	Libelle varchar(50)
    )
     
    INSERT INTO #Titres VALUES (10, 0, 1, 'Plantes')
    INSERT INTO #Titres VALUES (13, 10, 2, 'Fleurs')
    INSERT INTO #Titres VALUES (22, 13, 1, 'Animaux')
    INSERT INTO #Titres VALUES (24, 22, 2, 'Chiens')
    GO
     
    CREATE TABLE #Articles (
    	ArticleId int,
    	TitreId int,
    	Libelle varchar(50),
    	Ordre tinyint
    )
     
    INSERT INTO #Articles VALUES (1, 13, 'Ancolie', 2)
    INSERT INTO #Articles VALUES (2, 13, 'Roses', 1)
    INSERT INTO #Articles VALUES (3, 24, 'Boxer', 1)
    INSERT INTO #Articles VALUES (4, 24, 'Berger A.', 2)
    GO
     
    ;WITH cte1 AS (
    	SELECT 
    		t.TitreId, t.PrecedentId, t.Libelle, 1000 as Ordre, Niveau
    	FROM #Titres t
    	WHERE PrecedentId = 0
     
    	UNION ALL
     
    	SELECT t.TitreId, t.PrecedentId, t.Libelle, c.Ordre + 1000 as Ordre, t.Niveau		
    	FROM #Titres t
    	JOIN cte1 c ON t.PrecedentId = c.TitreId
    )
    SELECT
    	--ROW_NUMBER() OVER (ORDER BY t.Ordre, a.Ordre) as id,
    	-- CAST(ROW_NUMBER() OVER (ORDER BY TitreId) as varchar(20)) as Numero
    	t.Ordre,
    	t.Niveau,
    	SPACE(t.Niveau * 2) + t.Libelle
    FROM cte1 t
     
    UNION ALL
     
    SELECT
    	a.Ordre + t.Ordre,
    	t.Niveau + 1 as Niveau,
    	SPACE((t.Niveau + 1) * 2) + a.Libelle
    FROM #Articles a 
    JOIN cte1 t ON t.TitreId = a.TitreId
     
    ORDER BY Ordre;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 47
    Par défaut
    Citation Envoyé par rudib Voir le message
    Déjà ceci te permet de répondre au besoin, sauf la numérotation 1.1.1
    Pour cette numérotation, as-tu besoin de le faire selon une profondeur inconnue, ou sais-tu que ce sera toujours 3 niveaux ?
    Merci beaucoup rudib pour la réponse.
    je suis désolée pour la réponse tardive.
    je sais que la profondeur ne peut pas dépasser 5.
    c'est à dire le max de numéro est du genre 1.1.2.3.1
    J'utilise un curseur pour le faire,mais le problème est que le temps d’exécution est très long si l'on insère une nouvelle ligne et que l'on souhaite régénérer automatiquement la numérotation.
    Merci pour tout

Discussions similaires

  1. Besoin d'aide pour une requete imbriquée svp.
    Par plex dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/08/2007, 11h35
  2. Besoin d'aide pour une requete SQL
    Par fabris dans le forum Requêtes
    Réponses: 6
    Dernier message: 10/04/2006, 20h27
  3. besoin d'aide pour une requete
    Par Pigoulou dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/02/2006, 20h34
  4. Besoin d'aide pour une requete
    Par Okhotsk dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/11/2005, 16h30
  5. Besoin d'aide pour une requete
    Par jnc dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/07/2005, 11h54

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