on the existing stragg function from this link ( @
https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:2196162600402 )
just modified the ODCIAggregateTerminate like this
member function odciaggregateterminate(self in stragg_agg_type,
returnvalue out varchar2,
flags in number)
return number as
begin
for x in (select distinct column_value from table(self.l_total) order by 1)
loop
returnvalue := returnvalue ||';'||x.column_value;
end loop;
returnvalue := trim(';' from returnvalue);
return odciconst.success;
end;
Post that it produces the result set like this-with duplicates eliminated.
demo@PDB1> col job_lists format a80
demo@PDB1> select player_name, stragg( faults ) job_lists
2 from LISTAGG_TABLE_DEMO
3 group by player_name
4 order by player_name
5 fetch first 3 rows only
6 /
PLAYER_NAME JOB_LISTS
-------------------- --------------------------------------------------------------------------------
Player 1 1;10;100;11;12;13;14;15;16;17;18;19;2;20;21;22;23;24;25;26;27;28;29;3;30;31;32;3
3;34;35;36;37;38;39;4;40;41;42;43;44;45;46;47;48;49;5;50;51;52;53;54;55;56;57;58
;59;6;60;61;62;63;64;65;66;67;68;69;7;70;71;72;73;74;75;76;77;78;79;8;80;81;82;8
3;84;85;86;87;88;89;9;90;91;92;93;94;95;96;97;98;99
Player 10 1;10;100;11;12;13;14;15;16;17;18;19;2;20;21;22;23;24;25;26;27;28;29;3;30;31;32;3
3;34;35;36;37;38;39;4;40;41;42;43;44;45;46;47;48;49;5;50;51;52;53;54;55;56;57;58
;59;6;60;61;62;63;64;65;66;67;68;69;7;70;71;72;73;74;75;76;77;78;79;8;80;81;82;8
3;84;85;86;87;88;89;9;90;91;92;93;94;95;96;97;98;99
Player 2 1;10;100;11;12;13;14;15;16;17;18;19;2;20;21;22;23;24;25;26;27;28;29;3;30;31;32;3
3;34;35;36;37;38;39;4;40;41;42;43;44;45;46;47;48;49;5;50;51;52;53;54;55;56;57;58
;59;6;60;61;62;63;64;65;66;67;68;69;7;70;71;72;73;74;75;76;77;78;79;8;80;81;82;8
3;84;85;86;87;88;89;9;90;91;92;93;94;95;96;97;98;99
with 19c - distinct supported on LISTAGG - using that it went like this
c##rajesh@PDB19c> select banner from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
c##rajesh@PDB19c> col job_lists format a80
c##rajesh@PDB19c> select player_name, listagg( distinct faults ,',')within group(order by faults) job_lists
2 from LISTAGG_TABLE_DEMO
3 group by player_name
4 order by player_name
5 fetch first 3 rows only;
PLAYER_NAME JOB_LISTS
-------------------- --------------------------------------------------------------------------------
Player 1 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,5
7,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,
84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
Player 10 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,5
7,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,
84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
Player 2 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30
,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,5
7,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,
84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
c##rajesh@PDB19c>
or even we could do distinct + listagg on prior to 19c - something like this.
demo@PDB1> select player_name, listagg( faults , ';') within group (order by faults) job_lists
2 from (
3 select distinct player_name, faults
4 from LISTAGG_TABLE_DEMO
5 )
6 group by player_name
7 order by player_name
8 fetch first 3 rows only;
PLAYER_NAME JOB_LISTS
-------------------- --------------------------------------------------------------------------------
Player 1 1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30
;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;5
7;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;
84;85;86;87;88;89;90;91;92;93;94;95;96;97;98;99;100
Player 10 1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30
;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;5
7;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;
84;85;86;87;88;89;90;91;92;93;94;95;96;97;98;99;100
Player 2 1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30
;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;5
7;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72;73;74;75;76;77;78;79;80;81;82;83;
84;85;86;87;88;89;90;91;92;93;94;95;96;97;98;99;100