Thread: Concatenating multiple fetches into a single string
Dear Friends,
I am doing a migration from SQL server to Postgres SQL. A simple select fetches the following names.
select full_name FROM project_members where project_members.project_role_id in (' + @p_res_ids + ') ;
Let us say if the results are
full_name
---------------
David
Postgres
plpgsql
I need to send the out put as David,Postgres,Plsql -- one string, concatenates the fetches from multiple rows. This was handled in SQL server with a cursor.
Can this be handled only by sql manipulation or need to use cursors. If i use cursor in postgres, what is the equivalent of MS SQL Statement
WHILE @@FETCH_STATUS = 0.
please shed some light pls.
Dnia 2003-12-01 13:01, Użytkownik Kumar napisał: > Dear Friends, > > I am doing a migration from SQL server to Postgres SQL. A simple select > fetches the following names. > > select full_name FROM project_members where > project_members.project_role_id in (' + @p_res_ids + ') ; > > Let us say if the results are > > full_name > --------------- > David > Postgres > plpgsql > > I need to send the out put as David,Postgres,Plsql -- one string, > concatenates the fetches from multiple rows. This was handled in SQL > server with a cursor. I can't find simpler function (if I remember well, there is such one), so there is my version of aggregate function you need: create or replace function comma_aggregate(varchar,varchar) returns varchar as ' begin if length($1)>0 and length($2)>0 then return $1 || '', '' || $2; elsif length($2)>0 then return $2; end if; return$1; end; ' language 'plpgsql'; drop aggregate comma(varchar) cascade; create aggregate comma (basetype=varchar, sfunc=comma_aggregate, stype=varchar, initcond='' ); Regards, Tomasz Myrta
Thanks for your reply. But how to use this comma_aggregate( ) function to concatenate the fetched columns values from a select statement. In my example my select stmt fetches the following 3 rows. How can I use this function to concatenate them. Select full_name FROM project_members where project_members.project_role_id in ( ' x,y,z ') ; full_name---------------DavidPostgresplpgsql Expected return string is - 'David,Postgres,Plsql' Regards Kumar ----- Original Message ----- From: "Tomasz Myrta" <jasiek@klaster.net> To: "Kumar" <sgnerd@yahoo.com.sg> Cc: "psql" <pgsql-sql@postgresql.org> Sent: Tuesday, December 02, 2003 1:31 AM Subject: Re: [SQL] Concatenating multiple fetches into a single string > Dnia 2003-12-01 13:01, Użytkownik Kumar napisał: > > Dear Friends, > > > > I am doing a migration from SQL server to Postgres SQL. A simple select > > fetches the following names. > > > > select full_name FROM project_members where > > project_members.project_role_id in (' + @p_res_ids + ') ; > > > > Let us say if the results are > > > > full_name > > --------------- > > David > > Postgres > > plpgsql > > > > I need to send the out put as David,Postgres,Plsql -- one string, > > concatenates the fetches from multiple rows. This was handled in SQL > > server with a cursor. > > I can't find simpler function (if I remember well, there is such one), > so there is my version of aggregate function you need: > > > create or replace function comma_aggregate(varchar,varchar) returns > varchar as ' > begin > if length($1)>0 and length($2)>0 then > return $1 || '', '' || $2; > elsif length($2)>0 then > return $2; > end if; > return $1; > end; > ' language 'plpgsql'; > > drop aggregate comma(varchar) cascade; > create aggregate comma (basetype=varchar, sfunc=comma_aggregate, > stype=varchar, initcond='' ); > > Regards, > Tomasz Myrta > > > ---------------------------(end of broadcast)--------------------------- > TIP 3: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly
Dnia 2003-12-02 05:51, Użytkownik Kumar napisał: > Thanks for your reply. > > But how to use this comma_aggregate( ) function to concatenate the fetched > columns values from a select statement. In my example my select stmt fetches > the following 3 rows. How can I use this function to concatenate them. > > Select full_name FROM project_members where project_members.project_role_id > in ( ' x,y,z ') ; > > full_name > --------------- > David > Postgres > plpgsql > > Expected return string is - 'David,Postgres,Plsql' Where is the problem? It's an aggregate function - you use it like the other ones: select comma(full_name) from... There is one problem with this function - strings order is unexpectable, but you can always sort them in subselect before using this function: select comma(full_name) from (select full_name from .... order by full_name) X; Regards, Tomasz Myrta