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 :

[MSSQL2005] Groupement récursif


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut [MSSQL2005] Groupement récursif
    Bonjour,

    Pour un projet sur lequel je travaille actuellement je dois effectuer des calculs avant de regrouper les informations afin de générer des bilans.

    Or dans certains cas le regroupement se fait sur des données hiérarchiques, et devrait donc être récursif.

    Je m'explique :

    Ma donnée de base, sur laquelle j'effectue les calculs et que je souhaite regrouper, et une DEMANDE.

    (Je remplis une table temporaire avec les identifiants de DEMANDE et les calculs associés)

    Cette DEMANDE est rattaché à un SITE, lui-même rattaché à une SEGMENTATION.

    Cette segmentation (en l’occurrence un segmentation géographique), et hiérarchique, c'est-à-dire que chaque segmentation contient une référence vers sa segmentation mère (ID_PARENT).
    De plus elle contient un champ de typage (TYPE_SEGMENTATION) permettant d'attribuer des types aux segmentations (Pays, Region, Departement).

    Très logiquement, les SITE sont habituellement rattachés au niveau le plus bas soit dans cet exemple aux segmentations de type "Departement".

    Mon problème est de regrouper mes données par type de segmentation.

    Pas de souci pour grouper par segmentations de type "Departement" puisque mes SITE y sont directement rattachés, mais si je groupe sur un niveau supérieur (Region ou Pays), comment faire pour que les données des segmentations filles soient remontées et sommées dans mon resultat final ?

    J'ai essayé en utilisant les CTE mais je ne suis arrivé à rien de concluant...


    Merci d'avance pour votre aide !

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Il nous faudrait la structure des tables concernées
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bonsoir Népomucène,

    Est-ce que ceci fait l'affaire ?

    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
    -- ##TABLE_TEMP_CALCULS
    ID_DEMANDE (int non null)
    CALCUL1 (int)
    CALCUL2 (decimal)
     
    -- DEMANDE
    ID_DEMANDE (int PK non null)
    ID_SITE (int FK non null)
     
    -- SITE
    ID_SITE (int PK non null)
    ID_SEGMENTATION (int FK non null)
     
    -- SEGMENTATION
    ID_SEGMENTATION (int PK non null)
    ID_PARENT (int FK null)
    TYPE_SEGMENTATION (int FK null)

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Si les demandes sont sur des sites de type "département",
    et qu'il faut pouvoir regrouper par régions, il faudrait avoir
    un lien entre régions et département ; à savoir ce que tu disais dans :

    chaque segmentation contient une référence vers sa segmentation mère (ID_PARENT)
    Il faut donc la structure de la table contenant le champ ID_PARENT
    et on ne sera pas loin de la solution
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    En effet...

    J'ai corrigé mon précédent post pour ajouter le champ manquant.

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Bon alors la solution théorique pour présenter le tableau Pays/région/département est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
         P.TYPE_SEGMENTATION As Pays,
         R.TYPE_SEGMENTATION As Région,
         D.TYPE_SEGMENTATION As Département
     
    FROM 
         SEGMENTATION AS P INNER JOIN
         SEGMENTATION AS R ON P.ID_SEGMENTATION = R.ID_PARENT INNER JOIN
         SEGMENTATION AS D ON R.ID_SEGMENTATION = D.ID_PARENT
    Du coup, on peut connecter ce bel ensemble à la table des demandes et faire par exemple la somme des calculs par départements :
    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
    SELECT 
         P.TYPE_SEGMENTATION As Pays,
         R.TYPE_SEGMENTATION As Région,
         D.TYPE_SEGMENTATION As Département,
         SUM(T.CALCUL1) As TOTAL_1,
         SUM(T.CALCUL2) As TOTAL_2
     
    FROM 
         SEGMENTATION AS P INNER JOIN
         SEGMENTATION AS R ON P.ID_SEGMENTATION = R.ID_PARENT INNER JOIN
         SEGMENTATION AS D ON R.ID_SEGMENTATION = D.ID_PARENT INNER JOIN
         SITE AS S ON D.ID_SEGMENTATION = S.ID_SEGMENTATION INNER JOIN
         DEMANDE AS E ON S.ID_SITE= E.ID_SITE INNER JOIN
         TABLE_TEMP_CALCULS AS T ON T.ID_DEMANDE= E.ID_DEMANDE
     
    GROUP BY
         P.TYPE_SEGMENTATION As Pays,
         R.TYPE_SEGMENTATION As Région,
         D.TYPE_SEGMENTATION As Département
    pour regrouper par région, on supprime le niveau département :
    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
    SELECT 
         P.TYPE_SEGMENTATION As Pays,
         R.TYPE_SEGMENTATION As Région,
         SUM(T.CALCUL1) As TOTAL_1,
         SUM(T.CALCUL2) As TOTAL_2
     
    FROM 
         SEGMENTATION AS P INNER JOIN
         SEGMENTATION AS R ON P.ID_SEGMENTATION = R.ID_PARENT INNER JOIN
         SEGMENTATION AS D ON R.ID_SEGMENTATION = D.ID_PARENT INNER JOIN
         SITE AS S ON D.ID_SEGMENTATION = S.ID_SEGMENTATION INNER JOIN
         DEMANDE AS E ON S.ID_SITE= E.ID_SITE INNER JOIN
         TABLE_TEMP_CALCULS AS T ON T.ID_DEMANDE= E.ID_DEMANDE
     
    GROUP BY
         P.TYPE_SEGMENTATION As Pays,
         R.TYPE_SEGMENTATION As Région
    pour regrouper par pays, on supprime le niveau région:
    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
    SELECT 
         P.TYPE_SEGMENTATION As Pays,
         SUM(T.CALCUL1) As TOTAL_1,
         SUM(T.CALCUL2) As TOTAL_2
     
    FROM 
         SEGMENTATION AS P INNER JOIN
         SEGMENTATION AS R ON P.ID_SEGMENTATION = R.ID_PARENT INNER JOIN
         SEGMENTATION AS D ON R.ID_SEGMENTATION = D.ID_PARENT INNER JOIN
         SITE AS S ON D.ID_SEGMENTATION = S.ID_SEGMENTATION INNER JOIN
         DEMANDE AS E ON S.ID_SITE= E.ID_SITE INNER JOIN
         TABLE_TEMP_CALCULS AS T ON T.ID_DEMANDE= E.ID_DEMANDE
     
    GROUP BY
         P.TYPE_SEGMENTATION As Pays
    Joyeux Noël
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

Discussions similaires

  1. Objets "récursifs"
    Par Thierry65 dans le forum Langage
    Réponses: 3
    Dernier message: 09/05/2005, 20h40
  2. Script pour effacement récursif
    Par Filippo dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 09/01/2005, 17h10
  3. XPATH XSL Récursif (très débutant!)
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 24/08/2004, 10h04
  4. idFTP.DirectoryListing récursif + TreeNode
    Par fredfred dans le forum Composants VCL
    Réponses: 3
    Dernier message: 05/07/2004, 15h53
  5. [CR] Groupement dynamique sur plusieurs champs paramètrés
    Par CDRIK dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 07/06/2004, 17h55

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