Re: return a text agreggate from a subselect

Поиск
Список
Период
Сортировка
От Andrew G. Hammond
Тема Re: return a text agreggate from a subselect
Дата
Msg-id 1008790130.855.21.camel@xyzzy
обсуждение исходный текст
Ответ на return a text agreggate from a subselect  (Louis-David Mitterrand <vindex@apartia.org>)
Ответы Connections?  (Archibald Zimonyi <archie@netg.se>)
should temporary tables show up in \dt as type "temporary" or as something?  (Terrence Brannon <metaperl@mac.com>)
Список pgsql-sql
On Wed, 2001-12-19 at 11:11, Louis-David Mitterrand wrote:

> The subselect: (SELECT company_name FROM table)
>
> The output I'd like: 'Company1|Company2|Company3|etc.'
>
> Should I write a function or a new agreggate for this or is there is
> simpler way?

I'm afraid the cleanest way to do this is with an aggregate.

CREATE FUNCTION barjoin(text, text) RETURNS text AS ' SELECT CASE WHEN length($1) > 0 THEN $1 || ''|'' || $2   ELSE $2
END;'LANGUAGE 'sql'; 

CREATE AGGREGATE barconcat(basetype=text, sfunc=barjoin,                           stype=text, initcond='');

SELECT barconcat(company_name) FROM table;

If you're in the mood to pointlessly performance tune the snot out of
it, you could implement barjoin to simply do $1|$2, and then write a
final function for the aggregate that trimmed off the beginning |...

--
Andrew G. Hammond     mailto:drew@xyzzy.dhs.org
http://xyzzy.dhs.org/~drew/
56 2A 54 EF 19 C0 3B 43 72 69 5B E3 69 5B A1 1F
613-389-5481
5CD3 62B0 254B DEB1 86E0  8959 093E F70A B457 84B1
"To blow recursion you must first blow recur" -- me

В списке pgsql-sql по дате отправления:

Предыдущее
От: "David M. Richter"
Дата:
Сообщение: queryoptimizer force index use
Следующее
От: "Peter T. Brown"
Дата:
Сообщение: controlling process priority