[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 メーリングリストの案内