Обсуждение: Concatenate rows

Поиск
Список
Период
Сортировка

Concatenate rows

От
A Gilmore
Дата:
Hello,

If I have a table like :

ID    COLOR
1    blue
2    red
3    green

Could I write a SQL query that would return a single concatenated row
for all matching rows, with a specified seperator. For example like so :

blue:red:green:

Thank you for your time,
A Gilmore

Re: Concatenate rows

От
"Mike G."
Дата:
I suppose you could create a function, use a cursor to walk through the table row by row, assign the result of the each
rowfetched to the same variable each time. 

CREATE FUNCTION returns text
DECLARE
a text;
single_row text;

BEGIN

FETCH CURSOR INTO

 a := SELECT COLOR FROM X;

 single_row := single_row || ':' || a;

LOOP;

END;

return single_row;


On Sun, Feb 20, 2005 at 05:32:48PM -0800, A Gilmore wrote:
> Hello,
>
> If I have a table like :
>
> ID    COLOR
> 1    blue
> 2    red
> 3    green
>
> Could I write a SQL query that would return a single concatenated row
> for all matching rows, with a specified seperator. For example like so :
>
> blue:red:green:
>
> Thank you for your time,
> A Gilmore
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
>               http://archives.postgresql.org

Re: Concatenate rows

От
Michael Fuhr
Дата:
On Sun, Feb 20, 2005 at 05:32:48PM -0800, A Gilmore wrote:

> If I have a table like :
>
> ID    COLOR
> 1    blue
> 2    red
> 3    green
>
> Could I write a SQL query that would return a single concatenated row
> for all matching rows, with a specified seperator. For example like so :
>
> blue:red:green:

In PostgreSQL 7.4 and later you could do this:

SELECT array_to_string(array(SELECT color FROM foo), ':');

See "Array Constructors", "Arrays", and "Array Functions and
Operators" in the documentation.  Here are links for the latest
version of PostgreSQL:

http://www.postgresql.org/docs/8.0/static/sql-expressions.html#SQL-SYNTAX-ARRAY-CONSTRUCTORS
http://www.postgresql.org/docs/8.0/static/arrays.html
http://www.postgresql.org/docs/8.0/static/functions-array.html

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/

Re: Concatenate rows

От
A Gilmore
Дата:
Michael Fuhr wrote:
> On Sun, Feb 20, 2005 at 05:32:48PM -0800, A Gilmore wrote:
>
>
>>If I have a table like :
>>
>>ID    COLOR
>>1    blue
>>2    red
>>3    green
>>
>>Could I write a SQL query that would return a single concatenated row
>>for all matching rows, with a specified seperator. For example like so :
>>
>>blue:red:green:
>
>
> In PostgreSQL 7.4 and later you could do this:
>
> SELECT array_to_string(array(SELECT color FROM foo), ':');
>
> See "Array Constructors", "Arrays", and "Array Functions and
> Operators" in the documentation.  Here are links for the latest
> version of PostgreSQL:
>
> http://www.postgresql.org/docs/8.0/static/sql-expressions.html#SQL-SYNTAX-ARRAY-CONSTRUCTORS
> http://www.postgresql.org/docs/8.0/static/arrays.html
> http://www.postgresql.org/docs/8.0/static/functions-array.html
>

That works great, thank you very much.  I had been reading over the much
documentation but mistakenly skipped arrays assuming it wouldn't be
applicable.

A Gilmore