Fórum Pivot - Transformar linhas em colunas dinamicamente #504608
17/12/2014
0
[img]http://arquivo.devmedia.com.br/forum/imagem/238223-20141217-142716.png[/img]
Preciso exibí-los assim:
[img]http://arquivo.devmedia.com.br/forum/imagem/238223-20141217-142729.png[/img]
Pesquisando achei este link: [url:descricao=Pivot dinâmico com SQL Server]http://vladimirrech.blogspot.com.br/2014/02/pivot-dinamico-com-sql-server.html[/url]
E cheguei ao seguinte script, que me atende:
create table #temp (
ano int not null,
item int not null,
valor int
)
insert into #temp (ano,item, valor) values (2014,1,4400)
insert into #temp (ano,item, valor) values (2015,1,4500)
insert into #temp (ano,item, valor) values (2016,1,4600)
insert into #temp (ano,item, valor) values (2017,1,4700)
insert into #temp (ano,item, valor) values (2014,2,10600)
insert into #temp (ano,item, valor) values (2015,2,10900)
insert into #temp (ano,item, valor) values (2016,2,11000)
insert into #temp (ano,item, valor) values (2017,2,11300)
insert into #temp (ano,item, valor) values (2014,5,12000)
insert into #temp (ano,item, valor) values (2015,5,13000)
insert into #temp (ano,item, valor) values (2016,5,14000)
insert into #temp (ano,item, valor) values (2017,5,15000)
declare @cols nvarchar(max)
set @cols = stuff((
select distinct ','
+ quotename(ano)
from #temp
for xml path('')
), 1,1, '');
print @cols
declare @query as nvarchar(max)
set @query='SELECT * FROM (
SELECT item
, ano
, valor
FROM #temp
) AS t
PIVOT (
MAX(valor)
FOR ano IN ( ' + @cols + ' )
) as P;';
print @query
execute(@query)
drop table #temp
Gostaria de confirmar se é realmente este o caminho a seguir, ou se existem outras abordagens?
Esclarecendo o cenário. Tenho várias tabelas com vários indicadores por ano. Preciso exibir estes indicadores para analise e a melhor forma é planilhar.
Vale lembra que preciso gerar as colunas, no caso o Ano, dinamicamente, soluções com colunas fixas não vão atender ao requisitos da aplicação.
Desde já agradeço qualquer sugestão.
Soeuseijothaz
Curtir tópico
+ 0Posts
17/12/2014
Marisiana Battistella
Gostei + 0
17/12/2014
Soeuseijothaz
Também não vejo outra solução e vou usá-lo exaustivamente nesta aplicação.
Não gostei de criar a expressão em uma variável e executá-lo como comando, pois pode complicar a leitura e mesmo a criação (e olha vou ter expressões complicadas), mas fazer-se-a o que? kkkk
É sempre recomendado ouvir outras opiniões, quem sabe um maluco pode sugerir outra solução.
Apesar de acreditar que o princípio de Occam deve ser aplicado na medida do possível, não tenho preconceitos em relação a nenhuma abordagem.
Gostei + 0
17/12/2014
Alex Lekao
Ate hoje o que pesquisei pensando em colunas dinamicas e tal, sempre chegava ao pivot.
Como a Marisiana disse, sera o pivot o melhor recurso.
Gostei + 0
17/12/2014
Soeuseijothaz
Ate hoje o que pesquisei pensando em colunas dinamicas e tal, sempre chegava ao pivot.
Como a Marisiana disse, sera o pivot o melhor recurso.
Pois é sempre utilizei o Pivot e pesquisei muito antes de chegar ao script postado.
Agradeço a participação, pois este é o intuito do post, discutir e compartilhar informações.
Eu até tenho outro caminho, que seria usar o Access como banco de dados, pois ele faria isto de olhos fechados, mãos amarradas e no escuro. kkkk
Só que não dá para adotá-la.
Gostei + 0
17/12/2014
Alex Lekao
cara eu ate preciso utiliza-lo, mas estou com preguica de rescrever todo o codigo que ja tenho, que esta com colunas fixas para 12 meses, e o povo tem usado, entao to deixando para depois ja faz um ano eu acho. kkkk
Gostei + 0
17/12/2014
Marisiana Battistella
Tem SGBDs que não tem esse recurso, então tem que fazer uma manobra (quando não tem q fazer uma gambiarra) pra conseguir obter o retorno desejado.
Lembro que já entramos em uma conversa sobre um situação parecida mas a pessoa que criou a pergunta no fórum estava trabalhando com Firebird e, este, não possui o PIVOT ou nenhum outro recurso que faça o mesmo que o PIVOT faz.
Gostei + 0
18/12/2014
Alex Lekao
Me lembro deste post. rsrsr
Gostei + 0
19/12/2014
Soeuseijothaz
Levando-se em consideração a complicação do projeto como um todo isto é uma das minhas menores preocupação.
Agradeço a todos por compartilhar opiniões.
Gostei + 0
19/12/2014
Marisiana Battistella
Bom trabalho!
Gostei + 0
22/12/2014
Alex Lekao
Cara, disponha, embora eu achei que minhas contribuicoes sao quase nulas. kkkk
Boa sorte e bom trabalho com seu projeto.
Abraco.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)