Bonjour à tous,
J'aimerais utiliser la fonction Stuff qui permet de concaténer un champ par rapport à un regroupement group by.
Je voudrais pouvoir injecter un critère dans le stuff mais je ne dois pas l'injecter dans le group by global car je voudrais garder le group by tel qu'il est.
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 Select distinct S.Num_Sys, /* stuff permet de concatener les dates pour chaque Num_Sys */ STUFF((SELECT '#' + CAST([VAL] AS VARCHAR(MAX)) FROM ELTS E1 WHERE (Num_sys = S.Num_sys and (ELEMENT='DT') and VAL = '20/09/2011') order by Attr FOR XML PATH(''),TYPE).value('.','VARCHAR(MAX)'),1,1,'') as Date1, /* stuff permet de concatener les codes CodeE pour chaque Num_Sys */ STUFF((SELECT '#' + CAST([VAL] AS VARCHAR(MAX)) FROM ELTS ES2 WHERE (Num_sys = S.Num_Sys and ELEMENT='Code' /* mettre aussi un critere sur le champ 'DT' puisque ce critère est non null */ and exists (SELECT [ELEMENT] FROM ELTS WHERE (Num_sys = S.Num_sys and ELEMENT='DT_ACH' and VAL = '20/09/2011'))) order by Nu_Attr FOR XML PATH(''),TYPE).value('.','VARCHAR(MAX)'),1,1,'') as Cd_E From SOUS S group by S.Num_Sys;
En fait je voudrais pouvoir synchroniser les 2 stuff (qui portent sur 2 champs différents) : dans le premier stuff sélectionner seulement la ligne qui correspond à la date '20/09/2011'
et dans le second stuff selectionner seulement la ligne qui est associée à la date 20/09/2011' par le champ "Code1".
voici les scripts de création des tables :
Voici le résultat que je voudrais avoir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 CREATE TABLE SOUS ([NUM_SYS] INT) INSERT INTO SOUS ([NUM_SYS] VALUES (1); CREATE TABLE ELTS ([NUM_SYS] INT, [ELEMENT] [varchar](8), [CODE1] INT, [VAL] [varchar](20)) INSERT INTO ELTS ([NUM_SYS], [ELEMENT], [CODE1], [VAL]) VALUES (1,'DT', 1, '20/09/2011') INSERT INTO ELTS ([NUM_SYS], [ELEMENT], [CODE1], [VAL]) VALUES (1,'Code', 1, '999') INSERT INTO ELTS ([NUM_SYS], [ELEMENT], [CODE1], [VAL]) VALUES (1,'DT', 2, '22/09/2011') INSERT INTO ELTS ([NUM_SYS], [ELEMENT], [CODE1], [VAL]) VALUES (1,'Code', 2, '888')
Num_Sys | Date1 | Cd_E
1 | 20/09/2011| 999
et non :
Num_Sys | Date1 | Cd_E
1 | 20/09/2011 | 999#888
Je veux aussi garder les Stuff car j'ai d'autres enregistrements pour lesquels c'est nécessaire.
Avez-vous des idées ?
Merci beaucoup par avance.
Laurent.
Partager