Ferramentas de Usuário

Ferramentas de Site


dev_geral:bases_de_dados:sql:pivottable_totais_ano_mes

Pivot com CASE

O seguinte script T-SQL permite fazer "Pivoting" utilizando a função CASE, ou seja, somar um determinado campo numa tabela e agrupa-lo por ano (linhas) e meses (colunas).

SELECT     YEAR(randomDateField) AS Ano, ROUND(SUM(CASE MONTH(randomDateField) WHEN 1 THEN randomDecimalField ELSE 0 END), 0) AS Jan, ROUND(SUM(CASE MONTH(randomDateField) 
                      WHEN 2 THEN randomDecimalField ELSE 0 END), 0) AS Fev, ROUND(SUM(CASE MONTH(randomDateField) WHEN 3 THEN randomDecimalField ELSE 0 END), 0) AS Mar, 
                      ROUND(SUM(CASE MONTH(randomDateField) WHEN 4 THEN randomDecimalField ELSE 0 END), 0) AS Abr, ROUND(SUM(CASE MONTH(randomDateField) WHEN 5 THEN randomDecimalField ELSE 0 END), 
                      0) AS Mai, ROUND(SUM(CASE MONTH(randomDateField) WHEN 6 THEN randomDecimalField ELSE 0 END), 0) AS Jun, ROUND(SUM(CASE MONTH(randomDateField) 
                      WHEN 7 THEN randomDecimalField ELSE 0 END), 0) AS Jul, ROUND(SUM(CASE MONTH(randomDateField) WHEN 8 THEN randomDecimalField ELSE 0 END), 0) AS Ago, 
                      ROUND(SUM(CASE MONTH(randomDateField) WHEN 9 THEN randomDecimalField ELSE 0 END), 0) AS 'Set', ROUND(SUM(CASE MONTH(randomDateField) 
                      WHEN 10 THEN randomDecimalField ELSE 0 END), 0) AS 'Out', ROUND(SUM(CASE MONTH(randomDateField) WHEN 11 THEN randomDecimalField ELSE 0 END), 0) AS Nov, 
                      ROUND(SUM(CASE MONTH(randomDateField) WHEN 12 THEN randomDecimalField ELSE 0 END), 0) AS Dez
FROM         randomTable
GROUP BY YEAR(randomDateField)
ORDER BY Ano

Em que:

randomDatelField

representa um campo de data qualquer utilizado para agrupar a informação, o campo

randomDecimalField

representa o campo a totalizar, pertencentes a uma determinada tabela, representada neste exemplo por:

randomTable

Autoria

Escrito por ruiribeiro

dev_geral/bases_de_dados/sql/pivottable_totais_ano_mes.txt · Última modificação em: 2018/05/14 21:37 (edição externa)