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 mamotinho
      Olá, pessoal mais uma vez venho pedi a ajuda de vocês estou com um problema ao roda uma query que montei, eu sou iniciante na area e não tenho muito conhecimento então o codigo que fiz foi parte de meu conhecimento básico. bom o que eu quero resolver nessa query é o seguinte, eu quero consultar uma tabela e nela pega todos os registros com a a data vencida e lista ela dentro do while em seguida retornar dentro desse if o valor da coluna de cada uma exemplo de como fiz e ficou com loop infinito.

       
      declare @id int declare @getdate datetime select @id = IDCadastrado, @getdate = RegDate from BancoTeste.dbo.MinhaTabela where RegDate < getdate() while @id is not null begin select * from BancoTeste.dbo.MinhaTabela where IDCadastrado = @id end quando eu executo isso ai ele executa infinitamente o valor do primeiro registro repetidamente.
    • By Rodymb
      Bom dia!
      Estou fazendo um select em uma tabela de cupom fiscal e preciso que me mostre o operador do caixa e o supervisor que liberou a venda, que no caso é convênio.
      A consulta que montei é a seguinte:
       
      select  c.m00ad as CUPOM,
              c.m00ac as PDV,
              c.m02ak as VALOR,
              p.descricao as FINALIZADORA,
              c.m02ah as OPERADOR,
              f.nome as NOME_OP,
              c.m02ao as SUPERVISOR,
              f.nome as NOME_SUP
      from zan_m02 c inner join tab_funcionario f
      on c.m02ao = f.cod_funcionario
      inner join tab_finalizadora p
      on c.m02ai = p.cod_finalizadora
      where c.m00af = to_date('09/03/20','dd/mm/yy')
      and c.m00za = 3
      and c.m00ac = 9
      and c.m00ad = 379678
      group by c.m00ad,c.m00ac,c.m02ak,p.descricao,c.m02ah,f.nome,c.m02ao;
       
      A consulta me retorna o seguinte resultado:

       
      Como podem ver, repetiu o mesmo nome (operador e supervisor), sendo que o código é diferente.
       
      Isso acontece por que na tabela de funcionário o campo NOME serve para operador e supervisor e o que diferencia se é supervisor ou operador temos mais duas outras tabelas. A estrutura é assim:
       
      tab_funcionario -> temos o campo cod_funcionario e nome (todos os funcionários cadastrados são armazenados nessa tabela)
      tab_perfil -> temos os campos cod_perfil e descricao (todos os perfis cadastrados são armazenados nessa tabela)
      tab_perfil_funcionario -> temos os campos cod_funcionario e cod_perfil (tabela que relaciona as tabelas tab_funcionario e tab_perfil)
       
      A única coisa que preciso é que apareça no NOME_OP o nome do operador e não o nome do supervisor igual está aparecendo.
       
    • By agness
      a imagem é uma parte de uma tabela extensa.
      como eu faço uma consulta por exemplo para jogador igual à 1, 3, 5 e liga igual à 1?
      isso é para uma verificação se existe uma liga com exatamente os jogadores 1, 3 e 5, nem mais nem menos
      espero ter sido claro
    • 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.
       
       
       
       

×

Important Information

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