Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, bom dia.
Estou com dificuldade para unir o resultado de um Join entre duas tabelas de forma que os dados de uma das tabelas passe a integrar a tupla referente a ele. Vou exemplificar com um banco teste.
Tenho duas tabelas. A primeira é "Chamados" e a segunda "horario_pendencia". Como em um chamado podemos ter várias pendenciar, e assim temos vários horários de inicio e fim da atividade referente a cada pendencia, tive que criar a tabela de Horario_pencencia pois não teria como incrementar uma campo a mais na tabela de chamados toda vez que abrisse uma pendencia(pois não temos um número fixo de pendencia por chamado, caso seja possível criar uma tabela com campo variável me avisem kkk ). Sendo assim tenho um relacionamento entre a tabela de Chamado e Horario_pendencia.
Tabelas Chamados
idChamados Num_Serie Horario_Abertura Observacao 1 HHH00000 30/06/2016 Atolamento 2 HHH3245 30/06/2016 Erro ao Imprimir
Tabela Horario_Pendencia
idHorario_Pendencia Horario_Pend_Inicio Horario_Pend_Encerramento Id_Chamado_REF 1 01/07/2016 02/07/2016 1 2 10/07/2016 11/07/2016 1 3 12/07/2016 13/07/2016 1 4 01/07/2016 01/07/2016 2 5 06/07/2016 06/07/2016 2 6 15/07/2016 17/07/2016 2
Eu preciso trazer em apenas uma linha o chamado e seus horários de pendencia, ficando da seguinte forma:
idChamados Num_Serie Horario_Abertura Observacao Horario_Pend_Inicio Horario_Pend_Encerramento Horario_Pend_Inicio Horario_Pend_Encerramento Horario_Pend_Inicio Horario_Pend_Encerramento 1 HHH00000 30/06/2016 Atolamento 01/07/2016 02/07/2016 10/07/2016 11/07/2016 12/07/2016 13/07/2016 2 HHH3245 30/06/2016 Erro ao Imprimir 01/07/2016 01/07/2016 06/07/2016 06/07/2016 15/07/2016 17/07/2016
Estava utilizando Join porem não consegui unir os resultados das tabelas, onde a tabela Horario_Pendencia passe a assumir a linha referente ao ID do Chamado Referenciado (ID_Chamado_REF). Andei procurando sobre algo e encontrei o comando PIVOT mas não soube utilizar.
Alguém poderia me dar um norte para solucionar este relatório?
Motta, boa tarde.
Acompanhei o material que você me passou porém não consegui trazer os dados do segundo registro:
idHorario_Pendencia Horario_Pend_Inicio Horario_Pend_Encerramento Id_Chamado_REF
1 01/07/2016 02/07/2016 1
2 10/07/2016 11/07/2016 1
3 12/07/2016 13/07/2016 1
4 01/07/2016 01/07/2016 2
5 06/07/2016 06/07/2016 2
6 15/07/2016 17/07/2016 2
Resultado:
Id_Chamado_REF Horario1 Horario2 Horario1 Horario2 Horario1 Horario2
1 20160701 20160702 20160710 20160711 20160712 20160713
2 NULL NULL NULL NULL NULL NULL
Utilizei o seguinte select:
SELECT Id_Chamado_REF,
SUM(IF(Id_Chamado_REF=1,if(idHorario_Pendencia=1, Horario_Pend_Inicio,NULL),null)) AS Horario1,
SUM(IF(Id_Chamado_REF=1,if(idHorario_Pendencia=1, Horario_Pend_Encerramento,NULL),null)) AS Horario2,
SUM(IF(Id_Chamado_REF=1,if(idHorario_Pendencia=2, Horario_Pend_Inicio,NULL),null)) AS Horario1,
SUM(IF(Id_Chamado_REF=1,if(idHorario_Pendencia=2, Horario_Pend_Encerramento,NULL),null)) AS Horario2,
SUM(IF(Id_Chamado_REF=1,if(idHorario_Pendencia=3, Horario_Pend_Inicio,NULL),null)) AS Horario1,
SUM(IF(Id_Chamado_REF=1,if(idHorario_Pendencia=3, Horario_Pend_Encerramento,NULL),null)) AS Horario2,
SUM(IF(Id_Chamado_REF=2,if(idHorario_Pendencia=1, Horario_Pend_Inicio,NULL),null)) AS Horario1,
SUM(IF(Id_Chamado_REF=2,if(idHorario_Pendencia=1, Horario_Pend_Encerramento,NULL),null)) AS Horario2,
SUM(IF(Id_Chamado_REF=2,if(idHorario_Pendencia=2, Horario_Pend_Inicio,NULL),null)) AS Horario1,
SUM(IF(Id_Chamado_REF=2,if(idHorario_Pendencia=2, Horario_Pend_Encerramento,NULL),null)) AS Horario2,
SUM(IF(Id_Chamado_REF=2,if(idHorario_Pendencia=3, Horario_Pend_Inicio,NULL),null)) AS Horario1,
SUM(IF(Id_Chamado_REF=2,if(idHorario_Pendencia=3, Horario_Pend_Encerramento,NULL),null)) AS Horario2
FROM horario_pendencia GROUP BY Id_Chamado_REF;
O que estou fazendo de errado? Outra dúvida é, na tabela de Horario_Pendencia, não saberei quantos horários de pendencia tenho para um chamado, pois isso é algo variável e neste select tive que repetir 3 vezes o if sabendo que o chamado teve 3 pendencia.Tente trocar o SUM por MAX.
Nâo sei se entendi mas veja se istoajuda.