----- Mensaje original ----- > De: "Wilmer Garcia" <wilmeruribe...@gmail.com> > Para: pgsql-es-ay...@postgresql.org > Enviados: Miércoles, 25 de Abril 2018 16:48:54 > Asunto: Generar registros no existentes en tablas > > 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. > > En el caso que un trabajador solo trabajó 5 meses, igual se debe rellenar > las 6 columnas (años) por cada 12 registros (meses) y donde no se obtenga > datos, se rellena con valor cero (0). > > En la base de datos donde se extrae la información no existe una tabla > donde esté definido un calendario. > > El problema que no he logrado resolver, es cómo generar los doce registros > para los casos en que una persona trabajó menos de un año. > > Un intento fue utilizar un generate_series(1,12) como parte del FROM pero > no encuentro como vincularlo a la tabla donde esta la referencia a las > fechas de los registros de cobro del trabajador. > > Creo que se puede resolver con plpgsql pero quiero saber sin con SQL hay > solución antes de indagar a otro nivel. > > Se utiliza PostgreSQL 9.1 sobre Debian 8 > > Espero haber logrado hacerme entender, agradecido de antemano por su > atención. > > -- > *WILMER GARCIA* >
Para esta clase de casos, generalmente se recurre a crosstab para generar lo que llaman un "pivot": https://www.postgresql.org/docs/current/static/tablefunc.html HTH Gerardo