Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

xRicardox

Unindo resultado de Join em uma linha

Recommended Posts

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?

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por FabianoSouza
      Tenho a tabela VAGAS e a tab INSCRITOS.
       
      Preciso fazer um SELECT para retornar as Vagas e a quantidade de candidatos inscritos para cada VAGA.
       
      Fazendo isso retorna duplicidade de Vagas... :-(
       
      select V.empresa, COunt(CIV.cdVaga) AS insc from dbo.vagas AS V LEFT JOIN dbo.inscVaga AS CIV ON V.codigo = CIV.cdVaga GROUP BY V.codigo, V.empresa Como monto essa consulta??
    • Por Omar~
      Estou com a tarefa de elaborar uma leitura no banco de dados e não estou conseguindo achar uma solução para a instrução de leitura.
      Basicamente tenho uma tabela que de produtos, nela tenho uma coluna para registrar o vendedor e outra para registrar o comprador assim associar esses valores com a tabela de usuários.
      Digamos assim:
      SELECT produto.id, produto.vendedor, produto.comprador, usuarios.id, usuarios.nome FROM produto INNER JOIN usuarios ON produto.vendedor = usuarios.id Com isso tenho a informação do vendedor na tabela de usuários, mas como faria para obter os dados do comprador também?
       
      Uma forma seria executar dois joins na tabela de usuários porém acho que assim me parece mais gabiarra do que o jeito mais coeso de se fazer  (e na verdade foi gabiarra sim porque não sei como proceder)
      Tipo assim:
      SELECT produto.id, produto.vendedor, produto.comprador, a.id AS a_id, a.nome AS a_nome, b.id AS b_id, b.nome AS b_nome FROM produto INNER JOIN usuarios AS a ON produto.vendedor = a.id INNER JOIN usuarios AS b ON produto.comprador = b.id Tem outro jeito? Como?
    • Por Omar~
      Blz...?
      Vejamos essa query:
      SELECT postagem.id, postagem.link, postagem.autor, postagem.editor, usuario.id, usuario.nome FROM postagem INNER JOIN usuario ON postagem.autor = usuario.id Então estou buscando pelos dados da postagem e o autor da mesma.
      A questão é:
      Tenho uma tabela "postagem" que guarda informação do "autor" da postagem e quem a editou "editor"
      Com essa query consigo trazer o resultado da tabela usuario dano a referencia do autor.
      Mas como eu faria para ter os dados do "autor" e do "editor" na tabela "usuario"?
      Preciso obter os nomes de quem criou e quem editou.
    • Por r.guerra
      Salve galera, boa tarde a todos.
      estou tendo um problema que ainda nao consegui enxergar... faço uma consulta mysql que funciona normalmente no proprio ambiente(mysql) mas ao solicitar a exibição do campo via php gera nao exibe e me tras um alerta.
       
      ****codigo php
      function monta_avaliacao($cpf){
          $query = mysqli_query($_SESSION["conector"],"SELECT c.*, a. cliente AS clientes FROM clientes AS c INNER JOIN avaliacoes AS a ON c.id = a.cliente WHERE c.cpf='$cpf'");
           $dados = mysqli_fetch_assoc($query);
          print $dados['c.cpf'];
           }
       
      *****sainda no html
      Notice: Undefined index: c.cpf in C:\xampp\htdocs\acus\inclusoes\funcoes.php on line 29
      Notice: Undefined index: a.pe in C:\xampp\htdocs\acus\inclusoes\funcoes.php on line 30
       
      tenho um arquivo com as funções, e apenas mando os parametros.
    • Por Omar~
      Primeiro a situação porque é difícil de explicar:
      Preciso realizar uma query em duas tabelas uma de pergunta (tabela_A) outra de resposta (tabela_B) usando o operador LIKE
      Ambas possuem uma coluna para o conteúdo, a tabela_A possui também uma coluna para título.
      A tabela_b é possui uma coluna para se relacionar com a tabela_A.
      Então digamos que na tabela_A tenho a seguinte questão:
       
      tabela_A
      Título: João foi ao mercado?
      Conteúdo (pergunta): Alguém sabe se ele comprou arroz?
      tabela_B
      Conteúdo (resposta): Eu vi que joão comprou feijão.
       
      A consulta então seria pela palavra chave joão que poderia está presente nas 2 tabelas e em 3 colunas.
      Tentei da seguinte forma montar a query:
      SELECT tabela_A.id, tabela_A.titulo, tabela_A.pergunta, tabela_B.relacao, tabela_B.resposta FROM tabela_A INNER JOIN tabela_B ON tabela_A.id = tabela_B.relacao WHERE tabela_B.resposta LIKE '%joão%' OR ( tabela_A.titulo LIKE '%joão%' OR tabela_A.pergunta LIKE '%joão%' ) Os problemas são se eu passar o comando ON para relacionar a resposta com a pergunta:
      A query não retorna se não houver dados na tabela_B.
      A query só retorna resultado se for buscado dados pela coluna resposta (mesmo existindo a palavra chave nas colunas citadas da tabela_A).
       
      A questão é:
      Como eu realizaria essa consulta?
      Se a palavra chave for encontrado na coluna titulo, pergunta ou resposta, de forma a que eu irei listar a coluna_A.
      Exemplo:
      Pesquisou por Maria, no título não tem, na pegunta não tem, na resposta tem.
      Pesquisou por Luiz, no título tem,  na pegunta não tem, na resposta não tem.
       
      Ou seja em qualquer um dos campos de ambas colunas que houver a chave de consulta deve retornar dados da coluna_A, mesmo que seja uma resposta na coluna_B.
       
      A forma que estou procedendo mesmo dando o resultado esperado não acho adequado acredito que uma query bastaria.
      Consultar tabela_A pelos campos tilulo e pergunta.
      Consultar tabela_B pelo campo resposta.
      Usar a função no PHP array_merge para unir ambos resultados em um único array.
      Remover os índices duplicados do array unificado.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.