Fórum Separar linhas em colunas postgresql #484774
07/07/2014
0
estou com dificuldades no postgre SQL em separar linhas em colunas, por exemplo:
Tenho os seguintes dados:
Data | Máquina | Qtd
01/07/2014 | serra 1 | 12
01/07/2014 | serra 2 | 18
02/07/2014 | serra 1 | 14
02/07/2014 | serra 2 | 15
Quero apresentar da seguinte forma:
Máquina | 01/07/2014 | 02/07/2014
serra 1 | 12 | 14
serra 2 | 18 | 15
e assim sucessivamente conforme for abastecendo o banco com mais datas...
Grato.
Renan Maia
Curtir tópico
+ 0Post mais votado
07/07/2014
CREATE OR REPLACE FUNCTION public.func_dados_serra (
)
RETURNS void AS
$body$
DECLARE
r RECORD;
p RECORD;
q RECORD;
qtd_aux integer;
cabecalho text;
linha text;
BEGIN
cabecalho = 'MAQUINA';
FOR r IN SELECT data FROM dados_serra GROUP BY data ORDER BY data ASC
LOOP
cabecalho = cabecalho || ' | ' || r.data;
END LOOP;
RAISE NOTICE '%',cabecalho;
FOR p IN SELECT maquina FROM dados_serra GROUP BY maquina
LOOP
linha = p.maquina;
FOR q IN SELECT qtd FROM dados_serra WHERE maquina = p.maquina ORDER BY data ASC
LOOP
linha = linha || ' | ' || q.qtd;
END LOOP;
RAISE NOTICE '%',linha;
END LOOP;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
Testei e a saída foi essa:
NOTICE: MAQUINA | 2014-07-01 | 2014-07-02 NOTICE: serra 1 | 12 | 14 NOTICE: serra 2 | 18 | 15 Total query runtime: 33 ms. 1 row retrieved.
Ronaldo Lanhellas
Gostei + 1
Mais Posts
07/07/2014
Ronaldo Lanhellas
Gostei + 0
07/07/2014
Renan Maia
Porém sou novo na área de programação etc... poderia me dar um exemplo de como fazer isso?
Mais uma vez obrigado.
Gostei + 0
07/07/2014
Fabiano Carvalho
Não posso te ajudar tanto pois não trabalho com postgre, mas pela pesquisa rápida encontrei algumas soluções.
Gostei + 0
07/07/2014
Ronaldo Lanhellas
Gostei + 0
07/07/2014
Renan Maia
Fabiano, obrigado pela dica.
Att
Renan.
Gostei + 0
07/07/2014
Ronaldo Lanhellas
Gostei + 0
07/07/2014
Renan Maia
Portanto, se alguém tiver o mesmo problema, o fast possui uma solução fácil.
Gostei + 0
07/07/2014
Ronaldo Lanhellas
Gostei + 0
09/07/2014
Renan Maia
Mas agora estou com um novo problema, tenho a seguinte linha de comando na Query/postgres, que seleciona a tabela de tempo parado de cada máquina e apresenta numa query...
select pa.ds_parada, sum(ap.qtd_minutoparado) as minutos
from apontador ap
inner join paradas pa on pa.seq = ap.cd_parada
where ap.cd_horas = 11 and ap.dt_apontador between '01/07/2014' and '09/07/2014'
group by pa.ds_parada
.... que me traz os seguintes dados no postgres...
"RETRABALHO";250
"TROCA DE FERRAMENTAS/SETUP";2040
"FALTA DE PROGRAMACAO";75
"FALHA MECANICA";135
"CAFÉ/ALIMENTAÇÃO";90
"FALHA ELETRICA";1310
"FALTA DE EXAUSTAO";175
"FALTA DE MATERIA PRIMA";1100
"REUNIAO/TREINAMENTO";60
"FALTA DE AR COMPRIMIDO";135
"FALTA DE COLABORADOR";180
"FALTA DE EMPILHADEIRA";60
...existe aluma função especifica no POSTGRES para converter os valores que estão em minutos para horas, pois só dividir por exemplo os 250 minutos da primeira linha por 60 não resolve o problema.
Grato.
Gostei + 0
09/07/2014
Ronaldo Lanhellas
Pois se fizer isso:
SELECT 250/4;
Verá que o resultado = 4, minutos.
Gostei + 0
09/07/2014
Ronaldo Lanhellas
Pois se fizer isso:
SELECT 250/4;
Verá que o resultado = 4, minutos.
Desculpe, corrigindo o codigo acima:
SELECT 250/60;
Gostei + 0
09/07/2014
Renan Maia
Gostei + 0
09/07/2014
Ronaldo Lanhellas
select (250/60) as hora, (250.0/60.0) - (250/60) as minutos;
Gostei + 0
09/07/2014
Renan Maia
#Código
select (250/60) as hora, ((250.0/60.0) - (250/60))*60 as minutos;
Gostei + 0
09/07/2014
Ronaldo Lanhellas
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)