Pivot - Transformar linhas em colunas dinamicamente
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
Posts
17/12/2014
Marisiana Battistella
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.
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.
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.
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
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.
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.
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.
Clique aqui para fazer login e interagir na Comunidade :)