PIVOT dinâmico SQL Server

SQL Server

14/03/2019

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.
Edvaldo Lucena

Edvaldo Lucena

Curtidas 0

Respostas

Alex Lekao

Alex Lekao

14/03/2019

Oi Edvaldo, boa tarde!!!

Talves vc precisara fazer uma combinação.

Assim te ajuda?

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


GOSTEI 0
Edvaldo Lucena

Edvaldo Lucena

14/03/2019

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.
GOSTEI 0
Guilherme Augusto

Guilherme Augusto

14/03/2019

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.



Estou com a mesma duvida, voce conseguiu alguma resposta?
GOSTEI 0
POSTAR