Re: Generar registros no existentes en tablas

From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: Wilmer Garcia <wilmeruribe777(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Generar registros no existentes en tablas
Date: 2018-04-26 13:22:01
Message-ID: 20180426132201.gjpzyoidfz7o34tg@alvherre.pgsql
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Wilmer Garcia escribió:
> Saludos desde Venezuela, acudo a ustedes para solicitar su orientación
> respecto a un requerimiento que no he podido resolver.
>
> Se necesita generar un reporte de nomina donde se refleje el ingreso total
> mensual de un trabajador en los últimos 6 años.
>
> Siempre se deben generar 6 columnas (los seis años) y 12 registros que
> corresponden a los 12 meses.

El primer paso es hacer una consulta que traiga todos los datos de la
tabla (un registro por año y mes), y luego le haces un right join con un
generate_series que entregue todos los años y meses. En los años-meses
en que no haya datos aparecerá un NULL, que puedes transformar en 0 con
COALESCE (aunque si tienes múltiples ingresos por trabajador para
ciertos meses, vas a necesitar un GROUP BY y los ingresos serán sum(),
que te va a dar 0 y por lo tanto no necesitarás coalesce).

El segundo paso es como dice Gerardo: tomar ese resultado, que ya estará
completo de años-meses, y aplicar crosstab para pivotarlo. En postgres
10 podrías usar \crosstabview de psql, pero en 9.1 contrib/tablefunc es
la opción.

--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Wilmer Garcia 2018-04-26 15:44:44 Re: Generar registros no existentes en tablas
Previous Message Gerardo Herzig 2018-04-25 22:32:24 Re: Generar registros no existentes en tablas