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

Reply via email to