Bonjour,

J'ai un problème d'ordre lorsque je fais de l'aggrégation de valeurs.
Voici un exemple de données :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
select 'USER1000' Usr,2 Grp, 'Info 2' Info, '30/08/2011 12:13:11' DateHeure, 'U-0013' Nom, 'A' Code from dual union all
select 'USER0002',null,null,null,null,null from dual union all
select 'USER1111',1, 'Info 1', '30/08/2011 12:20:07', 'U-1703', 'A' from dual union all
select 'USER1111',1, 'Info 1', '30/08/2011 12:20:23', 'U-1902', 'B' from dual union all
select 'USER1111',1, 'Info 1', '30/08/2011 12:22:10', 'U-2026', 'A' from dual
USER1000 2 Info 2 30/08/2011 12:13:11 U-0013 A
USER0002
USER1111 1 Info 1 30/08/2011 12:20:07 U-1703 A
USER1111 1 Info 1 30/08/2011 12:20:23 U-1902 B
USER1111 1 Info 1 30/08/2011 12:22:10 U-2026 A

Je souhaite grouper les valeurs suivant USR, GRP et INFO et concaténer les NOM et concaténer les CODE

voici un exemple de requête pour grouper et concaténer les valeurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
with q as (
select 'USER1000' Usr,2 Grp, 'Info 2' Info, '30/08/2011 12:13:11' DateHeure, 'U-0013' Nom, 'A' Code from dual union all
select 'USER0002',null,null,null,null,null from dual union all
select 'USER1111',1, 'Info 1', '30/08/2011 12:20:07', 'U-1703', 'A' from dual union all
select 'USER1111',1, 'Info 1', '30/08/2011 12:20:23', 'U-1902', 'B' from dual union all
select 'USER1111',1, 'Info 1', '30/08/2011 12:22:10', 'U-2026', 'A' from dual)
select USR, GRP, INFO, min(DATEHEURE) DATE_MIN,
       wm_concat(NOM) NOMS,
       wm_concat(CODE) CODES
 from q
group by USR, GRP, INFO
Et en résultat j'obtiens :

USER0002
USER1000 2 Info 2 30/08/2011 12:13:11 U-0013 A
USER1111 1 Info 1 30/08/2011 12:20:07 U-1703,U-2026,U-1902 A,B,A

Le problème c'est que pour le USER1111, je veux les noms dans l'ordre et les codes associés dans l'ordre : U-1703,U-1902,U-2026 et en code : A,B,A, car les 2 infos sont liées et il faut qu'elles soient dans le même ordre, dans l'ordre de la DateHeure.

Je suis sous Oracle 10.2.0.4.0, et j'ai essayé sous Oracle 11.2.0.1.0 et l'ordre de concaténation change entre les versions.
J'ai essayé de mettre un order by :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
with q as (
select 'USER1000' Usr,2 Grp, 'Info 2' Info, '30/08/2011 12:13:11' DateHeure, 'U-0013' Nom, 'A' Code from dual union all
select 'USER0002',null,null,null,null,null from dual union all
select 'USER1111',1, 'Info 1', '30/08/2011 12:20:07', 'U-1703', 'A' from dual union all
select 'USER1111',1, 'Info 1', '30/08/2011 12:20:23', 'U-1902', 'B' from dual union all
select 'USER1111',1, 'Info 1', '30/08/2011 12:22:10', 'U-2026', 'A' from dual)
select USR, GRP, INFO, min(DATEHEURE) DATE_MIN,
       wm_concat(NOM) NOMS,
       wm_concat(CODE) CODES
from (select * from q order by USR, GRP, INFO, DATEHEURE)
group by USR, GRP, INFO
Mais ça ne change rien.

Comment faire ?

Merci