PIVOT dinâmico SQL Server
Boa tarde,
Tenho a seguinte consulta :
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 :
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.
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)
goO 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
Curtidas 0
Respostas
Alex Lekao
14/03/2019
Oi Edvaldo, boa tarde!!!
Talves vc precisara fazer uma combinação.
Assim te ajuda?
Talves vc precisara fazer uma combinação.
Assim te ajuda?
select convert(varchar(7),getdate(),21)
GOSTEI 0
Edvaldo Lucena
14/03/2019
Oi Edvaldo, boa tarde!!!
Talves vc precisara fazer uma combinação.
Assim te ajuda?
Boa tarde,Talves vc precisara fazer uma combinação.
Assim te ajuda?
select convert(varchar(7),getdate(),21)
Creio que não, por ser tratar de dados dinâmicos da consulta.
GOSTEI 0
Guilherme Augusto
14/03/2019
Boa tarde,
Tenho a seguinte consulta :
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 :
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.
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)
goO 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