Bonjour à tous,

J'aimerais utiliser la fonction Stuff qui permet de concaténer un champ par rapport à un regroupement group by.

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;
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.

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 :

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')
Voici le résultat que je voudrais avoir :

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.