Fórum PIVOT dinâmico SQL Server #601156

14/03/2019

0

Boa tarde,

Tenho a seguinte consulta :
1
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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?

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


Responder

Gostei + 0

14/03/2019

Edvaldo Lucena

Oi Edvaldo, boa tarde!!!

Talves vc precisara fazer uma combinação.

Assim te ajuda?

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


Ler Mais...

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

Gostei + 0

25/01/2023

Guilherme Augusto

Boa tarde,

Tenho a seguinte consulta :
1
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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.

Ler Mais...




Estou com a mesma duvida, voce conseguiu alguma resposta?
Responder

Gostei + 0

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

Aceitar