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

MS SQL Server Discussion :

Arbre et aggrégation de valeur


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 74
    Points
    74
    Par défaut Arbre et aggrégation de valeur
    Bonjour à tous

    Mes collègues m'on chargé de mettre à jour vers SQL server 2005 une application de devis actuellement sous paradox. Les éléments du devis sont
    organisés sous la forme d'un arbre d'une profondeur quelconque et avec une table autoref, j'ai programmé cela de la même manière que sous delph1 + bde; c'est à dire procedure récursive coté client + stockage de toutes les valeurs de sommage des éléments dans leur noeud parent, or avec des adoquery et des devis ayant en moyenne 4000 (50 à 8000) éléments avec une profondeur moyenne de 4, le recalcul est relativement lent, 3 à 4 secondes, alors qu'avant c'était quasi instantané. Je vois bien que le principe de non redondance de donnée n'est pas respecté avec ma méthode et qu'il faudrait peut être utiliser des procedure stockée ou des vues, mais la programmation n'est pas mon activté principale (maintenance info) et je ne suis pas arrivé à construire quoi que ce soit en respectant ces 2 principes, travail coté serveur et non redondance.

    Mes tables sont
    Table devis
    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
     
    CREATE TABLE [dbo].[T_DEVIS_DEV](
     	[DEV_ID] [bigint] NOT NULL,
     	[DEV_REF_PRI] [dbo].[D_REF_COURTE] NULL,
     	[DEV_REF_SEC] [dbo].[D_REF_LONG] NULL,
     	[DEV_LIBELLE] [dbo].[D_LIBELLE_MOY] NULL,
     	[DEV_DATE_PUB] [datetime] NULL,
     	[DEV_REDACTEUR] [dbo].[D_NOM_UTILISATEUR] NULL,
     	[DEV_PA1] [dbo].[D_MT_MONETAIRE] NULL,
     	[DEV_PA2] [dbo].[D_MT_MONETAIRE] NULL,
     	[DEV_PV1] [dbo].[D_MT_MONETAIRE] NULL,
     	[DEV_COEFF_VTE] [dbo].[D_COEFF_GEN] NULL,
     	[DEV_COEFF_DIFF] [dbo].[D_COEFF_GEN] NULL,
     	[DEV_MT_FRAIS] [dbo].[D_MT_MONETAIRE] NULL,
     	[DEV_COEFF_FRAIS] [dbo].[D_MT_MONETAIRE] NULL,
     	[DEV_MT_AJUST] [dbo].[D_MT_MONETAIRE] NULL,
     	[DEV_MT_RABAIS] [dbo].[D_MT_MONETAIRE] NULL,
     	[DEV_PCT_RABAIS] [numeric](15, 4) NULL,
     	[DEV_PVF] [dbo].[D_MT_MONETAIRE] NULL,
     	[DEV_NB_HRS_MO] [numeric](15, 4) NULL,
     	[DEV_MT_MO] [dbo].[D_MT_MONETAIRE] NULL,
     	[DEV_TAUX_TVA] [dbo].[D_TX_TVA_GEN] NULL
    Table Parties devis
    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
     
    CREATE TABLE [dbo].[T_DEVPART_DPT](
     	[DPT_ID] [bigint] NOT NULL,
     	[DEV_ID] [bigint] NULL,
     	[DPT_PID] [bigint] NULL,
     	[DPT_ORD] [int] NULL,
     	[DPT_STYPE] [dbo].[D_SOUS_TYP_ELEMENT] NULL,
     	[DPT_FAMILLE] [dbo].[D_FAMILLE_ARTICLE] NULL,
     	[DPT_REF] [dbo].[D_REF_ARTICLE] NULL,
     	[DPT_LIBELLE] [dbo].[D_LIBELLE_ARTICLE] NULL,
     	[DPT_QTE] [dbo].[D_QTE_ARTICLE] NULL,
     	[DPT_UNITP] [dbo].[D_UNIT_PU] NULL,
     	[DPT_PUA1] [dbo].[D_MT_MONETAIRE] NULL,
     	[DPT_PUA2] [dbo].[D_MT_MONETAIRE] NULL,
     	[DPT_PUV1] [dbo].[D_MT_MONETAIRE] NULL,
     	[DPT_MT_AJUST] [dbo].[D_MT_MONETAIRE] NULL,
     	[DPT_PUVF] [dbo].[D_MT_MONETAIRE] NULL,
     	[DPT_PTA1]  AS ([DPT_QTE]*[DPT_PUA1]),
     	[DPT_PTA2]  AS ([DPT_QTE]*[DPT_PUA2]),
     	[DPT_PTV1]  AS ([DPT_QTE]*[DPT_PUV1]),
     	[DPT_PTVF]  AS ([DPT_QTE]*[DPT_PUVF]+[DPT_MT_AJUST]),
     	[DPT_NB_HRS_MO] [dbo].[D_QUANTITE_GEN] NULL,
     	[DPT_MT_MO] [dbo].[D_MT_MONETAIRE] NULL,
    des coefficients sont appliqués entre PUA1 et PUA2 ainsi que entre PUA2 et PUV1, ainsi que un ajustement entre PUV1 et PUVF, les coefficient sont cherchés dans une 3 eme table par famille d'article

    Mes questions sont donc:
    - Est ce qu'il est possible de suivre les 2 principes cités plus haut pour produire une vue ou ce devis apparait à jour
    - Pour des arbres il est souvent recommandé dans ce forum d'utiliser la représentation par intervalles (SQLPro) est ce vraiment indispensable avec sql server 2005.
    - Je ne voudrais pas abuser , mais ne serait il pas possible d'avoir quelques pistes pour démarrer

    Merci

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut gestion des hierarchies avec sql serveur 2005.
    renseignez vous sur les CTE:

    With simplerecursive(field names)
    AS(membre d'ancrage UNION ALL membre recursif) SELECT * FROM simplerecursive

    Les CTE permettent de faire des requetes hierarchiques sur des données structurées sous forme d'arbres.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 917
    Points : 51 693
    Points
    51 693
    Billets dans le blog
    6
    Par défaut
    voici un article que j'ai écrit à ce sujet :
    http://www.sqlservercentral.com/colu...server2005.asp

    A +

  4. #4
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 74
    Points
    74
    Par défaut
    La requete récursive select j'y arrive je pense
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	WITH ArbreDevis(ID, PID) 
    	AS (SELECT DPT_ID, DPT_PID
    	FROM T_DEVPART_DPT
    	WHERE (DEV_ID = @DEV_ID AND DPT_PID IS NULL)
    	UNION ALL
    	SELECT A.DPT_ID, A.DPT_PID
    	FROM T_DEVPART_DPT AS A INNER JOIN
    	ArbreDevis AS AD ON A.DPT_PID = AD.ID)
     
    SELECT A.ID, A.PID, B.DPT_ORD, B.DPT_FAMILLE, B.DPT_REF, B.DPT_LIBELLE
    	FROM ArbreDevis AS A
    		INNER JOIN T_DEVPART_DPT B ON ( A.ID = B.DPT_ID)
    	ORDER BY A.PID, B.DPT_ORD
    Le problème c'est pour appliquer une fonctions récap SUM
    sur ce résultat en m'assurant que un parent n'est pas sommé tant que
    tous ses enfants n'ont pas été sommé

Discussions similaires

  1. Aggrégation de valeurs
    Par arno974 dans le forum Pentaho
    Réponses: 0
    Dernier message: 03/05/2010, 11h45
  2. [WD10] Recuperer la valeur d'un arbre
    Par Aeefred dans le forum WinDev
    Réponses: 4
    Dernier message: 05/04/2010, 13h34
  3. Réponses: 3
    Dernier message: 03/03/2008, 19h02
  4. Recuperer la valeur d'un champ d'aggrégation
    Par freud dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/08/2007, 21h03
  5. Valeur des champs dans l'arbre des composants
    Par mymyma dans le forum JSF
    Réponses: 2
    Dernier message: 06/07/2006, 11h19

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