From: Rajesh Kumar Mallah. <mallah@trade-india.com>
To: Marcus Claesson <marcus.claesson@angiogenetics.se>
To: pgsql-sql@postgresql.org
Subject: Re: How do I concatenate row-wise instead of column-wise?
Date: Tue, 16 Jul 2002 17:04:24 +0530
Message-ID: <200207161704.24120.mallah@trade-india.com> (raw)
In-Reply-To: <3D33D4AA.1020600@angiogenetics.se>
References: <3D33D4AA.1020600@angiogenetics.se>
Hi Marcus,
It is simple ,
you need to write a function and define an aggregate using that function.
in case you have already searched for
the solution and not found here it is from this mailing list only:
===========================================================================
Date: Tue, 14 May 2002 18:13:09 +0200
From: Mathieu Arnold <mat@mat.cc>
To: pgsql-sql@postgresql.org
Subject: [SQL] aggregate...
Message-ID: <1729482965.1021399989@andromede.reaumur.absolight.net>
X-Mailer: Mulberry/2.2.1 (Win32)
X-wazaaa: True, true
MIME-Version: 1.0
Content-Type: text/plain;
charset=us-ascii;
format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
Precedence: bulk
Sender: pgsql-sql-owner@postgresql.org
Status: RO
X-Status: O
Hi
I have this :
CREATE FUNCTION "comma_cat" (text,text) RETURNS text AS '
SELECT CASE WHEN $2 IS NULL OR $2 = '''' THEN $1
WHEN $1 IS NULL OR $1 = '''' THEN $2
ELSE $1 || '', '' || $2
END
' LANGUAGE 'sql';
CREATE AGGREGATE list ( BASETYPE = text, SFUNC = comma_cat, STYPE = text,
INITCOND = '' );
I can use it as :
select user, list(email) from user join email using (id_user);
user | list
-------+-----------------------------
mat | mat@mat.cc, mat@absolight.fr
isa | isa@mat.cc
===============================================================
regds
On Tuesday 16 July 2002 13:39, you wrote:
> I have a table like this:
> SELECT * FROM old_tab;
> id | descr
> -------------------
> 1 | aaa
> 1 | aaa
> 1 | bbb
> 2 | ccc
> 2 | bbb
> 3 | ddd
> 3 | ddd
> 3 | eee
> 3 | fff
> 4 | bbb
> etc...
>
> And I want a new table where the descr is concatenated row-wise like this:
> SELECT * FROM new_tab;
> id | descr
> --------------------------
> 1 | aaa;bbb
> 2 | ccc;bbb
> 3 | ddd;eee;fff
> 4 | bbb
> etc...
>
> This is the closest I get....:
> UPDATE new_tab SET descr = old_tab.descr||' ; '||old_tab.descr from
> old_tab where old_tab.id=new_tab.id;
> UPDATE 4
> SELECT * FROM new_tab ;
> id | descr
> ----+-----------
> 1 | aaa ; aaa
> 2 | ccc ; ccc
> 3 | ddd ; ddd
> 4 | bbb ; bbb
> etc...
>
> Thus, the concatenating operator never works on other rows than the
> present. How can I get around that and still stick to the postgresql
> syntax?
>
> Regards
> Marcus
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
--
Rajesh Kumar Mallah,
Project Manager (Development)
Infocom Network Limited, New Delhi
phone: +91(11)6152172 (221) (L) ,9811255597 (M)
Visit http://www.trade-india.com ,
India's Leading B2B eMarketplace.
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-sql@postgresql.org
Cc: mallah@trade-india.com, marcus.claesson@angiogenetics.se
Subject: Re: How do I concatenate row-wise instead of column-wise?
In-Reply-To: <200207161704.24120.mallah@trade-india.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox