concatenation avec Stuff et group by
Bonjour à tous,
J'aimerais utiliser la fonction Stuff qui permet de concaténer un champ par rapport à un regroupement group by.
Code:
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:
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.