Hi!,

Creo que puedes usar unnest para pivotar el array por filas y values() o join 
lateral para pivotar por columnas.

Postgres 11 | db<>fiddle (dbfiddle.uk)<https://dbfiddle.uk/41kRWZ2I>

Fuente: Equivalent to unpivot() in PostgreSQL - Stack 
Overflow<https://stackoverflow.com/questions/1128737/equivalent-to-unpivot-in-postgresql>

Saludos

________________________________
De: Horacio Miranda <hmira...@gmail.com>
Enviado: sábado, 6 de julio de 2024 6:07
Para: Ivan Perales M. <ivan.pera...@gmail.com>; Ayuda Esp PostgreSQL 
<pgsql-es-ay...@postgresql.org>
Asunto: Re: Convertir array en columnas


Revisa el concepto de pick out. las cajas las abres y generas la lista de 
materiales que esta adentro de la caja.

Esa debiera ser tu unidad, no las cajas.

On 6/07/2024 3:42 pm, Ivan Perales M. wrote:
Creo saber la respuesta, pero como quiera no se pierde nada con preguntar.

La mayoria de reportes que piden los usuarios son a excel y yo normalmente lo 
genero en programación, consulto a la bd, proceso los datos y genero el archivo 
de excel a gusto: formulas aqui y alla, me brinco lineas para dejar 
separaciones, ancho de columnas, formatos condicionales.. todo lo que ocupe.

Recientemente me pidieron implementar un BI y he estado viendo opciones, todos 
sin excepción consultan la información directo de la BD y los resultados los 
muestran en tablas, algunos dan la opción de transformar esos datos antes de 
mostrarlos, (pero aun no he llegado a esta parte aun en un par de BI's que 
estoy analizando).

El asunto es que tengo que mostrar un listado, digamos de cuantos movimientos 
hubo en el mes de los materiales, pero en nuestro sistema un material se divide 
en Cajas, por lo tanto los movs de inventario son para esas cajas, y aparte de 
mostrar el numero de movimientos tengo que mostrar todas las cajas que se 
movimiento, esa consulta la tengo asi:

select m.codigo, m.descripcion, count(*), array_agg(distinct e.caja_id order by 
e.caja_id)
from movimiento e
left join material m on m.id<http://m.id> = e.material_id
where e.fecha between :from and :to
group by m.codigo, m.descripcion

esto me da la información que necesito, pero las distintas cajas que se 
movieron aparecen en una sola columna de tipo array que yo mediante codigo la 
puedo extraer y agregar en columnas en el archivo de excel. La pregunta seria, 
hay alguna manera en que postgres me separe este array, o mejor digo, alguna 
función que en lugar de que me cree un array agregue columnas? a sabiendas de 
que un material podria tener solo 2 cajas que se movieron (serian solo 2 
columnas) y habrá materiales que movieron 50 cajas (habría 50 columnas).

Si esto no es posible directo en postgres, entonces tendria que buscar si en el 
BI puede hacerse esto mediante alguna clase de transformación de los datos.

Muchas gracias por su tiempo.

Saludos


--
Lindolfo Iván Perales Mancinas
Solo existen 10 tipos de personas en el mundo, las que saben binario y las que 
no.

Reply via email to