1
resposta

Estou com um problema em juntar dados entre 3 tabelas

Fiz a consulta acima juntando apenas 2 e deu certo. Porém preciso juntar uma terceira coluna informando a quantidade de itens por pedido ou seja, o maior número da sequencia de cada pedido deve aparecer em cada linha. Ao adicionar o having max(i.sequencia) a consulta gera vários erros. Se eu deixar sem o having e a coluna SEQUENCIA da tabela CPAC_COTPEDIDOS_ITENS funciona normalmente.

select
P.Id_CotPedido as Pedido,
Cl.Nome as NomeCliente,
Cl.Cidade,
P.QTDVolumes, P.PrevEntrega,
P.ID_DEPARTAMENTO as ID_DEP,
DP.NOME as DEPARTAMENTO_ATUAL **HAVING MAX(I.SEQUENCIA)**
from CPAC_COTPEDIDO P join
VWPESSOAS CL on P.ID_PESSOA = CL.ID_PESSOA
join DEPARTAMENTOS DP on P.ID_DEPARTAMENTO = DP.ID_DEPARTAMENTO
join CPAC_COTPEDIDO_ITEM I ON I.ID_COTPEDIDO = P.ID_COTPEDIDO
where P.BasicaNatalAtacado = 'A'
and P.ID_DEPARTAMENTO >= 5
and P.PREVENTREGA = '2024/07/25'
1 resposta

Olá Guilherme, tudo bem?

Isso aconteceu porque o HAVING é utilizado em conjunto com o GROUP BY, e não da forma como você tentou aplicar.

Para resolver o seu problema, você pode usar uma subconsulta para encontrar a maior sequência de cada pedido e depois juntar isso à consulta principal. Você pode fazer algo assim:

select
    P.Id_CotPedido as Pedido,
    Cl.Nome as NomeCliente,
    Cl.Cidade,
    P.QTDVolumes,
    P.PrevEntrega,
    P.ID_DEPARTAMENTO as ID_DEP,
    DP.NOME as DEPARTAMENTO_ATUAL,
    MaxSeq.MaxSequencia
from CPAC_COTPEDIDO P
join VWPESSOAS CL on P.ID_PESSOA = CL.ID_PESSOA
join DEPARTAMENTOS DP on P.ID_DEPARTAMENTO = DP.ID_DEPARTAMENTO
join CPAC_COTPEDIDO_ITEM I ON I.ID_COTPEDIDO = P.ID_COTPEDIDO
join (
    select 
        ID_COTPEDIDO, 
        max(SEQUENCIA) as MaxSequencia
    from CPAC_COTPEDIDO_ITEM
    group by ID_COTPEDIDO
) as MaxSeq on MaxSeq.ID_COTPEDIDO = P.ID_COTPEDIDO
where P.BasicaNatalAtacado = 'A'
and P.ID_DEPARTAMENTO >= 5
and P.PREVENTREGA = '2024/07/25'

Acima, a subconsulta MaxSeq encontra a maior sequência (max(SEQUENCIA)) para cada ID_COTPEDIDO e depois junta esses resultados à consulta principal usando um JOIN.

Espero ter ajudado.

Qualquer dúvida, compartilhe no fórum.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!