Transformação de resultados em linhas para colunas

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
rpsfilho
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Seg, 01 Set 2008 10:47 am
Localização: Rio de Janeiro - RJ
Roberto Pereira
Rio de Janeiro - RJ

Prezados, eu tenho uma consulta que me retorna diversas linhas como resultado, mas, eu preciso agrupar estas linhas transformando-as em colunas, tentarei explicar:
Ex. da query:

Selecionar tudo

Select produto, data_venda, valor 
from vendas

Selecionar tudo

group by produto, data_venda; 
Resultado obtido:

Selecionar tudo

produto_1, data_1, valor_1 
produto_1, data_2, valor_2 
produto_1, data_3, valor_3 
produto_1, data_4, valor_4 
produto_2, data_1, valor_1 
produto_2, data_2, valor_2 
produto_2, data_3, valor_3 
produto_2, data_4, valor_4 
produto_3, data_1, valor_1 
produto_3, data_2, valor_2 
produto_3, data_3, valor_3 
produto_3, data_4, valor_4 
Resultado desejado:

Selecionar tudo

data_1, produto_1, valor_1, produto_2, valor_1, produto_3, valor_1 
data_2, produto_1, valor_2, produto_2, valor_2, produto_3, valor_2 
data_3, produto_1, valor_3, produto_2, valor_3, produto_3, valor_3 
data_4, produto_1, valor_4, produto_2, valor_4, produto_3, valor_4 
Alguém teria como me ajudar com esta questão ?
alexandre_costa
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 22
Registrado em: Seg, 25 Ago 2008 11:18 am
Localização: Nova Mutum-MT
Alexandre Costa


DBA Oracle

Roberto,

Não conheco nenhuma maneira para fazer isso diretamente.
A unica forma q eu vejo é de você criar uma nova tabela, com as colulas desejadas, e assim colocar os resultados da sua consulta nela.
Porem pelo oque eu vejo no seu EX. a quantidade de produtos deve variar bastante, assim você teria que colocar muitas colunas na tabela. E não ficaria muito bom.

Outra maneira seria trabalhar esses dados no EXEL, rsrsrs!
Simples e facil!
thiago_r_f
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 43
Registrado em: Qui, 17 Abr 2008 4:02 pm
Localização: Rio de Janeiro - RJ
O Backup é meu pastor e nada me faltará!
Thiago Rodrigues de Farias

Cara, até agora a maneira mais fácil q achei para fazer isso foi através do MS Access (não me matem por falar dele aqui! huaihaiuhai). Existe um assistente para referência cruzada que faz isso de maneira fácil e rápida.
Do contrário, só agrupando dados formando uma coluna PK e criando as demais colunas relacionadas ao campo chave, o que pode ter uma séries de metodologias distintas... mas sinceramente, fazer isso no Access é bem mais tranquilo!
NaPraia
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 88
Registrado em: Sex, 22 Fev 2008 8:24 am
Localização: Floripa - SC

Olha, eu acho que dá para montar um function para fazer isso

Selecionar tudo

function tabela_lateral is
-- coloca a tua consulta aqui que vai ser um cursor (trazendo o nome do produto, a pk e a data)
v_total number := 0;
consulta varchar2(1000); 
begin
select count(distinct produto) into v_total from tabela;
consulta := 'select  ';
open c_cursor;
loop
  fetch c_cursor into r_cursor;
   exit when c_cursor%notfound;
    consulta := consulta ||' r_cursor.nome, select sum(valor) from tabela where id = '|| r_cursor.codigo;
end loop;
consulta := consulta ||'  from tabela ';
execute(consulta);
end;
Esse código não vai funcionar corretamente, pois quando faço a soma do valor não estou levando em conta a data. Agora precisa alterar alguma coisa para atender a tua consulta, mas a base é essa aí.

Espero que esse código possa te ajudar ou de repente alguém consegue modificar.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 14 visitantes