PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 17/04/2015 09:47:33

trandraka
Membre

Crosstab dynamic

J'ai crée la fonction suivante (à partir des plusieurs forum) pour une crosstab dynamic, elle marche bien sauf qu'il n'affiche pas toute les données répété, ces données ne sont pas des doublons mais une liste de tableau, pouvez vous m'aider à résoudre ce problème. Ça va aider plusieurs développeur :-)



CREATE OR REPLACE FUNCTION dm.foo()
  RETURNS text AS
$BODY$
DECLARE
dynamic_columns varchar;
BEGIN

select array_to_string(array_agg(distinct item_name order by item_name), ' text, ') into dynamic_columns from dm.clinicaldata;

return 'select * from crosstab (
    ''select Distinct  subject_id, item_group_name, item_group_repeat, item_form_order, item_name, item_value from dm.clinicaldata order by 1'',
    ''select Distinct item_name from dm.clinicaldata order by item_name''
    )
    as newtable (
    subject_id varchar, item_group_name varchar, item_form_order varchar, item_group_repeat int, '|| dynamic_columns ||' text
    )';


END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION dm.foo()
  OWNER TO postgres;
--------
CREATE OR REPLACE FUNCTION dm.bar()
  RETURNS void AS
$BODY$
DECLARE
dyn_crosstab text;
BEGIN

DROP VIEW IF EXISTS barview;

select dm.foo() into dyn_crosstab;

execute 'create view barview as '||dyn_crosstab;

END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION dm.bar()
  OWNER TO postgres;

select dm.bar();

select * from barview;


ci-joint le fichier des données en excel
psbgnj5h.jpg

Hors ligne

Pied de page des forums