Postgresql. Transformar los datos de columnas en filas.

Puede ocurrir que en algunas situaciones necesitemos obtener los datos de las columnas de una tabla en Postgres para que dicha información sea mostrada en filas.

Para ver el funcionamiento de este tipo de consultas vamos a crear una tabla con los primeros 6 meses del año. Utilizamos dos filas de datos obtenidos de forma aleatoria.

Creamos la tabla.

DROP TABLE IF EXISTS "public"."ventas";
CREATE TABLE "public"."ventas" (
  "id" int2 NOT NULL DEFAULT nextval('venta_id_seq'::regclass),
  "enero" int2,
  "febrero" int2,
  "marzo" int2,
  "abril" int2,
  "mayo" int2,
  "junio" int2
);
ALTER TABLE "public"."ventas" ADD CONSTRAINT "venta_pkey" PRIMARY KEY ("id");

Insertamos los datos aleatorios.

INSERT INTO "public"."ventas" VALUES (1, 400, 45, 234, 120, 112, 80);
INSERT INTO "public"."ventas" VALUES (2, 345, 90, 198, 98, 145, 144);

La siguiente consulta muestra los datos de las columnas en filas.

select id, 
unnest(array[enero, febrero, marzo, abril, mayo, junio]) AS importe,
unnest(array['Enero', 'Febrero', 'Marzo', 'Abril','Mayo','Junio']) AS meses											
FROM ventas 
group by id
order by id
idImporteMes
1400Enero
145Febreo
1234Marzo
1120Abril
1112Mayo
180Junio
2345Enero
290Febreo
2198Marzo
298Abril
2145Mayo
2144Junio

Con una consulta normal los datos se verán asi.

idEneroFebreroMarzoAbrilMayoJunio
14004523412011280
23459019898145144

Con la función “unnest” de postgres, y un par de arrays, conseguimos mostrar la información de cada una de las columnas de una tabla en una fila independiente. El segundo array que utilizamos es solo para mostrar en la fila el nombre de la columna correspondiente.

Este truco nos puede resultar muy útil cuando necesitamos mostrar los datos de una sola fila, en una tabla con muchas columnas, en vez de mostrar los datos en una extensa linea, podemos dividir cada columna en su correspondiente fila, mostrando la información de una forma más clara.

Share

Comments are closed.