Tengo una tabla y me gustaría extraer una fila por id con valores de campo concatenados.
En mi tabla, por ejemplo, tengo esto:
TM67 | 4 | 32556
TM67 | 9 | 98200
TM67 | 72 | 22300
TM99 | 2 | 23009
TM99 | 3 | 11200
Y me gustaría dar salida:
TM67 | 4,9,72 | 32556,98200,22300
TM99 | 2,3 | 23009,11200
En MySQL pude usar la función agregada GROUP_CONCAT, pero eso no parece funcionar aquí ... ¿Hay un equivalente para PostgreSQL u otra forma de lograr esto?
sql
postgresql
group-concat
string-aggregation
TwixxyKit
fuente
fuente

Respuestas:
Este es probablemente un buen punto de partida (solo la versión 8.4+):
array_agg devuelve una matriz, pero puede ENVIARLA al texto y editarla según sea necesario (consulte las aclaraciones a continuación).
Antes de la versión 8.4, debe definirlo usted mismo antes de usar:
(parafraseado de la documentación de PostgreSQL)
Aclaraciones:
fuente
Desde 9.0 esto es aún más fácil:
fuente
array_agg), por ejemplo,string_agg(some_column, ',' ORDER BY some_column)o inclusostring_agg(surname || ', ' || forename, '; ' ORDER BY surname, forename)distinctfuncione con string_agg, por lo que se puede usarstring_agg(distinct some_solumn, ',')TEXTsi es un valor no encadenable (es deciruuid). Esto se vería asístring_agg(some_column::text, ',')Lo haré igual.
fuente
Intenta así:
fuente
y la versión para trabajar en el tipo de matriz :
fuente
character varying(5)[]. Además, he verificado que, para mi propósito, se necesita unnest; de lo contrario, veráERROR: cannot accumulate arrays of different dimensionality.Mi sugestion en postgresql
fuente
ORDER BYuna consulta interna? ¿No se perderá el pedido de todos modos?Espero que debajo de Oracle la consulta funcione.
fuente