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