Série da semana: Primeiros passos no Angular

Veja mais

PIVOT dinâmico SQL Server

14/03/2019

6

Boa tarde,

Tenho a seguinte consulta :
SELECT * FROM BASE_RREIP WHERE dt_hr_fecom BETWEEN DATEADD(MONTH, -12,GETDATE()) AND DATEADD(MONTH,1, GETDATE()) 

E desejo montar uma consulta PIVOT da seguinte forma, baseada na consulta acima:

DESGIGNACAO TOTAL mar/18 abr/18 mai/18 jun/18 jul/18 ago/18 set/18 out/18 nov/18 dez/18 jan/19 fev/19 mar/19
XXX 26 2 2 2 2 2 2 2 2 2 2 2 2 2

Pesquisando e com ajuda de algumas pessoas consegui gerar o código abaixo e que me resultou :
declare @colunas_pivot as nvarchar(max), @comando_sql  as nvarchar(max)
set @colunas_pivot =
    stuff((
        select
            distinct ',' +  quotename(month(dt_hr_fecom))
        from TOP_ANO 
        for xml path('')
    ), 1, 1, '')
print @colunas_pivot
set @comando_sql = '
    select * from (
        select
			 month(dt_hr_fecom) as mes,
             designacao_circuito,
            COUNT(NUM_REC) as Valor
        from TOP_ANO
                group by designacao_circuito, month(dt_hr_fecom) 
    ) em_linha
    pivot (sum(valor) for mes in (' + @colunas_pivot + ')) em_colunas 
    order by 1'
execute(@comando_sql)
go

O que eu preciso é que no nome das colunas (meses) venha acompanho do ano(ex.: 03/2018 e 03/2019) e se possível ordenado.
Responder

Posts

14/03/2019

Alex Lekao

Oi Edvaldo, boa tarde!!!

Talves vc precisara fazer uma combinação.

Assim te ajuda?

select convert(varchar(7),getdate(),21)


Responder

14/03/2019

Edvaldo Lucena

Oi Edvaldo, boa tarde!!!

Talves vc precisara fazer uma combinação.

Assim te ajuda?

select convert(varchar(7),getdate(),21)


Boa tarde,
Creio que não, por ser tratar de dados dinâmicos da consulta.
Responder