[pgsql-jp: 33832] Re: 文字列をsum したい
Takao Kato
sirius @ jp.fujitsu.com
2004年 8月 10日 (火) 09:10:26 JST
加藤@川崎です。
以前(かれこれ1年前になりますか)別の方が同じような話題(この時はintでし
た)があり、便乗で質問した際に集約関数を紹介していただいたことがありま
す。 (よく覚えてた > 自分 ^^;)
> 以下のような結果が欲しいのですが,どのようなSQLを書けばよいで
> しょうか?
>
> day | comment
> -----+-------------
> 1 | Today is Fine.
> 2 | Tomorrow is Rain.
>
> 空白とか連結の順番は違ってしまっても構いません.
> 実際には他のカラムで何とかなりますので.
の条件であれば、以下のFUNCTION/AGGREGATIONを定義し、sum()の代わりに
text_list()を利用すればいけると思います。
# final_funcで {} で囲んじゃってますのでその辺りは修正してください
CREATE FUNCTION text_list_accum(text,text) RETURNS text as '
DECLARE
list ALIAS FOR $1;
val ALIAS FOR $2;
BEGIN
IF list IS NULL THEN
RETURN val;
ELSIF val IS NULL THEN
RETURN list;
ELSE
RETURN list || '','' || val;
END IF;
END;
'LANGUAGE 'plpgsql';
CREATE FUNCTION text_list(text) RETURNS text[] as '
DECLARE
list ALIAS FOR $1;
BEGIN
RETURN ''{'' || list || ''}'';
END;
' LANGUAGE 'plpgsql';
CREATE AGGREGATE text_list(
basetype = text,
sfunc = text_list_accum,
stype = text,
finalfunc = text_list);
pgsql-jp メーリングリストの案内