create function join_str_sfunc(TEXT, TEXT) returns TEXT as ' select case when $1 = '''' then $2 when $2 = '''' then $1 else $1 || '' '' || $2 end ' language 'sql';
create aggregate join_str ( basetype = text , sfunc = join_str_sfunc , stype = text , initcond = '' );
CREATE TABLE 好物 (名前 VARCHAR(10) NOT NULL, 番号 INT NOT NULL, 好物 VARCHAR(50) NOT NULL, PRIMARY KEY (名前,番号));
insert into 好物(名前,番号,好物)values('おれ', 3, '皮'); insert into 好物(名前,番号,好物)values('おれ', 2, 'レバー'); insert into 好物(名前,番号,好物)values('おれ', 1, 'ビール'); insert into 好物(名前,番号,好物)values('他人', 3, '手羽先'); insert into 好物(名前,番号,好物)values('他人', 2, 'つくね'); insert into 好物(名前,番号,好物)values('他人', 1, '日本酒');
select 名前,replace(join_str(好物),' ','@') as 好物 from 好物 group by 名前;