J’ai un tableau et j’aimerais tirer une ligne par identifiant avec les valeurs de champ concaténées.
Dans ma table, par exemple, j’ai ceci:
TM67 | 4 | 32556 TM67 | 9 | 98200 TM67 | 72 | 22300 TM99 | 2 | 23009 TM99 | 3 | 11200
Et j’aimerais sortir:
TM67 | 4,9,72 | 32556,98200,22300 TM99 | 2,3 | 23009,11200
En MySQL, j’ai pu utiliser la fonction d’agrégat GROUP_CONCAT
, mais cela ne semble pas fonctionner ici … Y a-t-il un équivalent pour PostgreSQL ou une autre façon d’y parvenir?
C’est probablement un bon sharepoint départ (version 8.4+ uniquement):
SELECT id_field, array_agg(value_field1), array_agg(value_field2) FROM data_table GROUP BY id_field
array_agg renvoie un tableau, mais vous pouvez le convertir en texte et le modifier si nécessaire (voir les précisions ci-dessous).
Avant la version 8.4, vous devez le définir vous-même avant de l’utiliser:
CREATE AGGREGATE array_agg (anyelement) ( sfunc = array_append, stype = anyarray, initcond = '{}' );
(paraphrasé à partir de la documentation de PostgreSQL)
Clarifications:
Depuis 9.0, c’est encore plus facile:
SELECT id, ssortingng_agg(some_column, ',') FROM the_table GROUP BY id
SELECT array_to_ssortingng(array(SELECT a FROM b),', ');
Fera aussi bien.
Essayez comme ceci:
select field1, array_to_ssortingng(array_agg(field2), ',') from table1 group by field1;