Jump to content
FabianoSouza

[Resolvido] Mesclar consulta 1 para n

Recommended Posts

Tenha a tab A (tabela pai) e a tab B (tabela filha).

Quero saber como "mesclar" num SELECT os valores de um campo específico da tabela B com os campos já exibidos da tabela A numa única linha.

 

Que ficasse uma linha mais ou menos assim:

 

LINHA:

_______________________________________________________________________________________________________________

NomeCompleto (da tab A) | Salario (da tab A) | Idade (da tab A) | Fotos (foto1.jpg, foto2.jpg, foto3.jpg... da tab B)

_______________________________________________________________________________________________________________

 

 

O caractére separador no campo Fotos por ser vírgula, hífen, etc.

Share this post


Link to post
Share on other sites

Olá @Motta

Olhei o link.

A função STRING_AGG é uma mão na roda. Eu não a conhecia.

Fiz uns experimentos com base nos exemplo do link (veja box abaixo). Funcionou perfeitamente.

 

SELECT a.articleId, title, STRING_AGG (tag, ',') as tags
FROM dbo.Article AS a
LEFT JOIN dbo.ArticleTag AS t
    ON a.ArticleId = t.ArticleId
GROUP BY a.articleId, title;

 

Porém , na minha situação preciso fazer dois JOIN. Aí a função STRING_AGG deixa de funcionar (retorna várias linhas).

Consegue dizer se há como resolver isso?

Veja meu cenário:

 

SELECT
V.Codigo 
, V.Titulo
, STRING_AGG (AA.caminhoArq, ',') as arquivos
FROM
tabA AS V

LEFT JOIN
tabB AS AV ON
V.Codigo = AV.codVaga

LEFT JOIN
tabC AS AA ON
AV.codArqAcervo = AA.idArquivoAcervo

WHERE V.Codigo = 123456
GROUP BY Codigo, Titulo, caminhoArq

 

bd.png

Share this post


Link to post
Share on other sites

Faz assim

 

um select grande


 

select xxx
from xxx
join ....

 

faz ser uma tabela virtual e coloca o agg aqui


 

select  ..., STRING_AGG (...)
from
(
select xxx
from xxx
join ....
)

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By maxsybam
      Fala pessoal, eu estou desenvolvendo um sistema de estoque para a minha universidade para o meu TCC.
      Neste sistema tenho telas de consultas. Em uma das consultas seria uma consulta por um item especifico, fiz um select para selecionar qual o item a ser consultado no banco, mas na hora que clico no botão de consultar, ele está trazendo todos os itens cadastrados e eu gostaria que voltasse só o que está relacionado ao que foi selecionado.
       
      CÓDIGO DO SELECT
       
      <form action="item_resultado.php" action="POST">
        <b></br></br>
         Item <select name="item">
           <?php
            require_once("connect.php");
            $con_bd = connect();
            $select_catergoria= "SELECT * FROM tb_item";
            $result = mysqli_query($con_bd,$select_catergoria);
            if ($result){
              foreach($result as $item1){
              echo"<option value='".$item1['id_item']."'>".$item1['desc_item']."</option>";
            }
            }
            ?>
         </select><label>
        </b>
        </br></br><input type="submit" name="btconsultar" value="Consultar">
          </form>
       
       
       
       
      CÓDIGO DA TELA item_resultado.php
       
      <div class="corpo">
          <?php
      require_once("connect.php");
      $conbd=connect();
      if(empty($modelo)){
        $consulta="SELECT * FROM tb_item";
      }else{
        $consulta="SELECT * FROM tb_item INNER JOIN tb_categoria ON categoria_item=nome_categoria WHERE desc_item AND alc_item AND volume_item AND responsavel_item AND guia_item AND safra_item AND obs_item";
      }
      $consultando=mysqli_query($conbd,$consulta);
      echo "<table id='tabela'><tr><th>Item</th><th>Categoria</th><th>%ALC</th><th>Volume</th><th>Responsável</th><th>Guia</th><th>Safra</th><th>Observação</th></tr>";
      foreach ($consultando as $result_consult) {
        echo "<tr><td>" . $result_consult['desc_item'] . "</td>";
        echo "<td>" . $result_consult['categoria_item'] . "</td>";
        echo "<td>" . $result_consult['alc_item'] . "</td>";
        echo "<td>" . $result_consult['volume_item'] . "</td>";
        echo "<td>" . $result_consult['responsavel_item'] . "</td>";
        echo "<td>" . $result_consult['guia_item'] . "</td>";
        echo "<td>" . $result_consult['safra_item'] . "</td>";
        echo "<td>" . $result_consult['obs_item'] . "</td></tr>";
      }
      echo "</table>";
      ?>
      </div>
    • By ARILSONDIASRAMALHO
      1) Crie um select que exibe o valor gasto por todos os CLIENTES cadastrados. Essa seleção deve exibir além do total gasto (por cliente), o nome e cpf do cliente.
      2) Crie um select que exibe quais são os dois CLIENTES que mais gastaram. Essa seleção deve exibir o total gasto (por cliente), o nome e o cpf do cliente.
      3) Crie um select que exibe quais são os três PRODUTOS com a maior quantidade PEDIDOS. Exiba o nome e o código do produto.
      4) Crie um select que exibe o nome do cliente que comprou a maior quantidade de ITENS de PEDIDO.
       
       
       
       

    • By jmike936
      Prezados,
       
      Possuo um banco de dados e necessito deixar uma página disponível para quando o usuário entrar com o número do cpf(id), retornar as informações do banco para ele.
      No momento o site está em localhost.
       
      Algum plugin? ou Tema para esse tipo de demanda?
    • By JorgeeHenrique
      Bom dia, sou iniciante em Delphi, estou fazendo um Cadastro de Clientes, gostaria de usar três Edit´s para filtrar alguns  dados porem com o código abaixo consegui fazer apenas com 1 edit.text, como faço pra usar três e que se algum estiver em branco ele retorna o valor apenas do Edit.text que foi preenchido?
       
      Exemplo: 
       
      Quero buscar por Nome, Situação e Rota (Cliente a da rota B com situação C) e se algum desses campos estiver vazio ele busca apenas o que foi preenchido. Obrigado pela atenção!
       
      .
      procedure TFrm_Cadastro.Bt_BuscarClick(Sender: TObject); begin with Frm_Cadastro.Tbl_Clientes do begin Close; SQL.Clear; SQL.Add( 'Select * from Tbl_Cad_Clientes'); SQL.Add('where Cli_Nome like :nome'); ParamByName('nome').Value := '%' + txt_buscar_nome.Text + '%'; Open; end; end;  
    • By brunoogm
      Pessoal tenho o seguinte select no mysql
       
      SELECT SUM(ValorTotal) as Total_Mes, YEAR(DataPedido) as Ano,
                                                      CASE extract(MONTH from DataPedido)
                                                      WHEN 1 THEN 'Janeiro'
                                                      WHEN 2 THEN 'Fevereiro'
                                                      WHEN 3 THEN 'Março'
                                                      WHEN 4 THEN 'Abril'
                                                      WHEN 5 THEN 'Maio'
                                                      WHEN 6 THEN 'Junho'
                                                      WHEN 7 THEN 'Julho'
                                                      WHEN 8 THEN 'Agosto'
                                                      WHEN 9 THEN 'Setembro'
                                                      WHEN 10 THEN 'Outubro'
                                                      WHEN 11 THEN 'Novembro'
                                                      WHEN 12 THEN 'Dezembro'
                                                  END AS mes
                                                  from comanda Where Year(DataPedido) = year(curdate()) and CodigoSituacao = 2 OR Year(DataPedido) = (year(now())-1) and CodigoSituacao = 2
                                                  group by mes, YEAR(DataPedido)
                                                  limit 0,12
       
      E ele me retorna a seguinte situação : 
       
      Total_Mes      Ano         mes
      555.00            2018       Agosto
      310.00            2019       Agosto
      150.00            2019       Fevereiro
      777.00            2018       Janeiro
      100.00            2019       Janeiro
      70.00             2019         Maio
       
      E no caso eu gostaria de omitir os registros que NÃO se repetem, ou seja, retirar da consulta os resultados onde o mês só apareça uma vez (maio e fevereiro)
      Preciso que o resultado seja o seguinte :
       
      Total_Mes      Ano         mes
      555.00            2018       Agosto
      310.00            2019       Agosto
      777.00            2018       Janeiro
      100.00            2019       Janeiro
       
      Alguém tem uma  ideia de como fazer isso ?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.