Bonjour,
J'ai un problème d'ordre lorsque je fais de l'aggrégation de valeurs.
Voici un exemple de données :
USER1000 2 Info 2 30/08/2011 12:13:11 U-0013 A
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
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 :
Et en résultat j'obtiens :
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
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 :
Mais ça ne change rien.
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
Comment faire ?
Merci
Partager