Saludos

Te paso éste SQL que hice para hacer un reporte de las ventas por mes
distribuidas en años cómo una sola consulta

with
T1 as (select extract(year from fechacreacion) as anio, extract(month from
fechacreacion) as mes, total from factura),
T2 as (select anio, mes, sum(total)as suma from T1 group by anio, mes)
select anio,
             SUM(case when mes = 1 then suma else 0 end) as ene,
    SUM(case when mes = 2 then suma else 0 end) as feb,
    SUM(case when mes = 3 then suma else 0 end) as mar,
    SUM(case when mes = 4 then suma else 0 end) as abr,
    SUM(case when mes = 5 then suma else 0 end) as may,
    SUM(case when mes = 6 then suma else 0 end) as jun,
    SUM(case when mes = 7 then suma else 0 end) as jul,
    SUM(case when mes = 8 then suma else 0 end) as ago,
    SUM(case when mes = 9 then suma else 0 end) as sep,
    SUM(case when mes = 10 then suma else 0 end) as oct,
    SUM(case when mes = 11 then suma else 0 end) as nov,
    SUM(case when mes = 12 then suma else 0 end) as dic
 from T2 group by anio
order by anio

Seguramente existirán muchas otras formas.


El 15 de mayo de 2017, 11:36, Enrique Gushiken <kgushi...@gmail.com>
escribió:

> Buenos días,
> Estoy tratatando de realizar una consulta tipo referencia cruzada en
> postgresql pero no logro obtener resultados. En access lo he logrado
> realizar de la siguiente manera:
>
> TRANSFORM Sum(total) AS Total
> SELECT tema, archivo
> FROM Descargas
> GROUP BY tema, archivo
> PIVOT mes;
>
> en postgresql intento con lo siguiente:
>
> SELECT * FROM crosstab(
>   'SELECT archivo, mes, total FROM v_descargas order by 1, 2',
>   'SELECT m FROM generate_series(1,12) m'
> ) AS report (
>   archivo text, "Ene" text, "Feb" text, "Mar" text, "Abr" text, "May"
> text, "Jun" text, "Jul" text, "Ago" text, "Sep" text, "Oct" text, "Nov"
> text, "Dic" text
> );
>
> esto me devuelve la cantidad de filas y columnas exactas pero en valor me
> sale nulo, no llega a contabilizar cuantas descargas por mes tiene un
> archivo.
>
> la idea es que me muestra un cuadro similar a esto:
>
> NombreArchivo   Ene  Feb  Mar  Abr   May ....
> ===========  ===  === ===  ===  ===
> Archivo 1             2      1      4      3      7
> Archivo 2             5      9      8      4      6
> Archivo 3             6      7      2      1      4
>

Responder a