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
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 |