Usuário com melhor resposta
Transformar Linhas em Colunas Dinamicamente

Pergunta
-
Bom dia,
Pessoal, quem poder ajudar agradeço, queria transformar linhas em colunas dinamicamente no sqlserver.
Tenho uma tabela assim:
Coluna01 Coluna02 01 pao 02 arroz 03 feijão 04 carne 04 frango 01 02 03 04 pao arroz feijão carne frango Agradeço antecipadamente,
- Editado wnjesus sexta-feira, 29 de março de 2019 13:42 Correção de texto
Respostas
Todas as Respostas
-
Experimente o código abaixo!
SELECT Col Coluna01, [01], [02], [03], [04], [04] FROM minhaTabela UNPIVOT( Val FOR Col IN (Coluna02)) UNPVT PIVOT (MAX(Val) FOR Coluna01 IN ([01], [02], [03], [04], [04])) PVT
“First do it, then do it right, then do it better.” - Addy Osmani
-
-
-
-
wnjesus,
Mas neste caso este select poderá ser tornar algo de dificil processamento para o SQL Server.
Estas combinações de sequencias estão de alguma forma condicionadas a uma regra?
Veja se estes exemplos postados recentemente aqui nos fóruns podem te ajudar:
select Empresas, [0] as [0:00], [1] as [1:00], [2] as [2:00], [3] as [3:00], [4] as [4:00], [5] as [5:00], [6] as [6:00], [7] as [7:00], [8] as [8:00], [9] as [9:00], [10] as [10:00], [11] as [11:00], [12] as [12:00], [13] as [13:00], [14] as [14:00], [15] as [15:00], [16] as [16:00], [17] as [17:00], [18] as [18:00], [19] as [19:00], [20] as [20:00], [21] as [21:00], [22] as [22:00], [23] as [23:00] from ( select Empresas, DATEPART(HOUR, ColunaHorario) as Hora from Transito inner join Empresas on Empresas.id = Transito.id where Transito.Data between @dataini and @datafim) ) as t pivot ( count(Hora) for Hora in ([0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24]) ) as p
-- Criando a Tabela -- CREATE TABLE #T1 (Hora time(0), Carro char(3), Apelido varchar(20)) Go INSERT into #T1 (Hora, Carro, Apelido) Values ('1:00','ABC','Carro 1'), ('1:00','DEF','Carro 2') Go -- Pesquisando os dados -- Declare @Carros varchar(200); Set @Carros= Stuff((SELECT distinct ',' + QuoteName(Convert(varchar,Carro)) from #T1 for XML PATH('')),1,1,''); -- Declarando o Pivot com Query Dinâmica -- Declare @ComandoSQL varchar(1000); Set @ComandoSQL= 'SELECT Hora, ' + @Carros + ' from #T1 ' + 'pivot (max(Apelido) for Carro in (' + @Carros + ')) as T2'; -- Executando a Query Dinâmica -- Exec(@ComandoSQL); -- Excluíndo a tabela -- Drop Table #T1
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-