PIVOT dinâmico SQL Server

14/03/2019

0

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

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

25/01/2023

Guilherme Augusto

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?
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar