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 :

Aggrégation de champs [2008R2]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Par défaut Aggrégation de champs
    Bonjour à tous,

    Tout d'abord, j'ai vu que cette question avait été posée à plusieurs reprises mais les réponses dépassent mes compétences en développement et je n'ai pas réussi à adapter les codes sources indiqués pour répondre à ma problématique.

    Voici ma question:

    J'ai une table Ligne_Alteration qui est structurée de la manière suivante:

    DO_Domaine(int, non NULL)
    DO_Type (int, non NULL)
    DO_Piece (varchar(50), non NULL)
    Num_Ligne(int, non NULL)
    AR_Ref(int, non NULL)
    Code_Alteration(nvarchar(50), non null)
    Valeur (numeric(24,3), non NULL)

    En terme de données, ca donne:

    DO_Domaine DO_Type DO_Piece NumLigne AR_Ref CodeAlteration Valeur
    0 1 BCV0000405 2 AJOF25019090PS X2 90.000
    0 1 BCV0000023 1 APX100019120M2 XL 103.000
    0 1 BCV0000023 1 APX100019120M2 XBR 7.500
    0 1 BCV0000023 1 APX100019120M2 XCNC 0.000
    0 1 BCV0000023 2 APX100019120M2 XCNC 0.000
    0 1 BCV0000023 3 APX130020120M2 XBR 63.000
    0 1 BCV0000023 3 APX130020120M2 XCNC 0.000
    0 1 BCV0000023 4 AJX130025100M2 XBR 42.000
    0 1 BCV0000023 4 AJX130025100M2 XCNC 0.000
    0 1 BCV0000024 1 APX130019090A2 XBR 11.000
    0 1 BCV0000024 1 APX130019090A2 XTT 5.000
    0 1 BCV0000024 2 APX080019090A2 XD 7.000
    0 1 BCV0000024 2 APX080019090A2 XH 10.000
    0 1 BCV0000024 2 APX080019090A2 XTT 4.200

    L'idée est de réaliser une vue qui me donnerait le résultat via un regroupement:

    DO_Domaine DO_Type DO_Piece NumLigne AR_Ref Aggregat
    0 1 BCV0000405 2 AJOF25019090PS X2: 90.000
    0 1 BCV0000023 1 PX100019120M2 XL:103.000 XBR:7.500 XCNC: 0,000
    0 1 BCV0000023 3 APX130020120M2 XBR: 63.000 XCNC: 0.000

    etc...

    En résumé, l'idée est que la vue fasse un regroupement sur les colonnes DO_DOMAINE, DO_TYPE, NUM_LIGNE et AR_REF que les valeurs des colonnes CodeAlteration et Valeur soient concaténées sous la forme CodeAlteration + ':' + Valeur + 'espace'... de manière récursive pour ne créer qu'une chaine

    J'ai essayé avec les requêtes qui font appel à la notion de XML path mais sans succès, c'est pour cela que je requiers votre aide

    Merci d'avance

    Michael

  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,

    Pourquoi ne pas traiter la concaténation dans le programme client ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Par défaut
    Bonjour

    Je n'ai pas de "programme client". Il s'agit d'une base SQL sur laquelle j'ai besoin de faire une vue.

    Michael

  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
    Par défaut
    Alors vous pouvez faire 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
    SELECT DISTINCT
    	DO_Domaine 
    	,DO_Type 
    	,DO_Piece 
    	,Num_Ligne 
    	,AR_Ref 
    	,REPLACE(
    		SUBSTRING(
    				Res
    				,4 
    				,LEN(res) - 7
    		)
    		,'</c><c>'
    		, ';'
    	)
    FROM ligne_alteration T1
    CROSS APPLY(
    	SELECT 
    			Code_alteration  + ':' + CAST(Valeur AS NVARCHAR(50))
    	FROM	ligne_alteration T2
    	WHERE
    		T2.DO_Domaine = T1.DO_Domaine 
    		AND T2.DO_Type  = T1.DO_Type
    		AND T2.DO_Piece =T1.DO_Piece 
    		AND T2.Num_Ligne= T1.Num_Ligne 
    		AND T2.AR_Ref =T1.AR_Ref 
    	FOR XML PATH('c')
    )X(Res)

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5
    Par défaut
    Merci de votre aide !! Ca fonctionne

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/07/2012, 15h47
  2. Formater l'affichage d'un champ aggrégat
    Par MickSou dans le forum Bases de données
    Réponses: 4
    Dernier message: 10/01/2012, 16h56
  3. 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, 22h03
  4. Champ Aggrégat et Currency
    Par VincentR dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/02/2005, 09h56
  5. developpement base de donnée: Les champs d'aggrégat
    Par Jahrnee dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/03/2004, 20h39

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