Postgresql - 建立一个plpgsql函数

Egi*_*idi 1 postgresql function plpgsql user-defined-functions

我是plpgsql的初学者,我被困在编码函数中.我需要一个执行以下操作的函数:

给表,该表中的id_field以及该表中的另一个字段:

原始表

id_field     field_traspose
---------    --------------
    1              A
    1              B
    1              C
    2              A
    3              F
    3              X
Run Code Online (Sandbox Code Playgroud)

结果

id_field     field_traspose
---------    --------------
    1              A, B, C
    2              A
    3              F, X
Run Code Online (Sandbox Code Playgroud)

我的尝试:

CREATE OR REPLACE FUNCTION traspose(mytable character varying, id_field character varying, field_traspose character varying)
  RETURNS setof RECORD AS
$BODY$ 
DECLARE
    r record;
    result record;
BEGIN

FOR r IN EXECUTE 'SELECT '||id_field||','||field_traspose||'  from '||mytable LOOP

-- Here should go the logic that joins every field_traspose for a same id_field and
--returns the record as one of the returning records (can be many different id_fields)   

RETURN NEXT result;
END LOOP;

RETURN;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
Run Code Online (Sandbox Code Playgroud)

我陷入了困境.问候,

a_h*_*ame 5

不需要这样的功能,这已经是内置的:

select id_field, 
       string_agg(field_traspose, ', ' order by field_traspose) 
from the_table 
group by id_field
order by id_field;
Run Code Online (Sandbox Code Playgroud)

  • 8.4是EOL,需要升级.使用array_agg()和array_to_string()可以获得与string_agg()相同的结果,它只需要一些额外的工作.从版本9.0开始,默认情况下可以使用string_agg(),但您可以在8.4中自己创建此函数 (5认同)