Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Update a partir de uma Consulta.

Pessoal, hoje eu tentei fazer o uodate de uma coluna, com o resultado de a consulta mas nao não consegui, alguem, sabe se é possível? Essa é a consulta :

SELECT L.CODFILIAL FILIAL, L.IDLAN REF, L.NUMERODOCUMENTO DOCUMENTO, L.HISTORICO HISTORICO, L.DATAEMISSAO EMISSAO, 
       L.DATAVENCIMENTO VECTO, L.DATABAIXA BAIXA, L.MESDECOMPETENCIA COMPETENCIA, format(L.VALORORIGINAL,'N2') as VL_ORIGINAL, format(L.VALORBAIXADO, 'N2') VL_BAIXADO,
       P.INTEGRACHAVE, /*P.DATA DATA_APROPR,*/ P.DEBITO DEBITO, P.VALOR VL_DEBITO, B.INTEGRACHAVE, /*B.DATA DATA_BAIXA,*/B.CREDITO CREDITO, format(SUM(B.VALOR),'N2') VL_CREDITO,

     case 
        when p.DEBITO = b.CREDITO then 'ok'
        else 'diferença'
    end as 'Dif Contabilização'
       
FROM   FLAN L (NOLOCK), CPARTIDA P (NOLOCK)

LEFT OUTER JOIN CPARTIDA B (NOLOCK) ON B.CODCOLIGADA = P.CODCOLIGADA AND B.INTEGRAAPLICAÇÃO = 'F' AND SUBSTRING(B.INTEGRACHAVE,1,1) = 'B'
                                       AND SUBSTRING(B.INTEGRACHAVE,2,20) = SUBSTRING(P.INTEGRACHAVE,2,20) 
                                       AND SUBSTRING(B.CREDITO,1,11) NOT IN ('1.1.32.002.','1.1.12.001.')
                                       AND SUBSTRING(B.CREDITO,1,1) NOT IN ('3','4')

WHERE  L.CODCOLIGADA = P.CODCOLIGADA
AND    P.INTEGRAAPLICAÇÃO = 'F'
AND    SUBSTRING(P.INTEGRACHAVE,1,1) = 'I'
AND    SUBSTRING(P.INTEGRACHAVE,2,20) = L.IDLAN
AND    SUBSTRING(P.DEBITO,1,11) IN ('1.1.32.021.','1.1.32.031.','1.1.32.099.','2.1.61.032.','2.1.61.033.','2.1.61.034.','1.1.39.005.')
AND    P.DATA>='01/01/2021'
AND    P.DATA<='07/12/2023'
AND    L.DATABAIXA IS NOT NULL
AND    L.STATUSLAN NOT IN (0,2,3)
and    l.CODFILIAL = 7
AND    (case 
                when p.DEBITO = b.CREDITO then 'ok'
                else 'diferença'
          end) = 'diferença'
--AND	   L.CODFILIAL =1

GROUP BY L.CODFILIAL, L.IDLAN, L.NUMERODOCUMENTO, L.HISTORICO, L.DATAEMISSAO, 
         L.DATAVENCIMENTO, L.DATABAIXA, L.MESDECOMPETENCIA, L.VALORORIGINAL, L.VALORBAIXADO,
         P.INTEGRACHAVE, P.DEBITO, B.INTEGRACHAVE, B.CREDITO, P.VALOR
HAVING   SUM(P.VALOR) <> SUM(B.VALOR) OR P.DEBITO <> B.CREDITO

ORDER BY L.IDLAN
2 respostas
solução!

Oii, Joel! Tudo bem?

É possível, Joel!

No cenário que você apresentou, como sugestão, pode ser usado o UPDATE junto com JOIN para atualizar a coluna desejada com o resultado da sua consulta.

Para exemplificar, veja como ficaria com o uso do UPDATE e JOIN:

UPDATE tabela_destino
JOIN tabela_origem ON condição_de_junção
SET tabela_destino.coluna = tabela_origem.coluna
WHERE condição_de_filtro;

Porém, você precisa substituir tabela_destino pelo nome da tabela em que você deseja fazer o update, tabela_origem pelo nome da tabela que contém o resultado da sua consulta, condição_de_junção pela condição que relaciona as duas tabelas e coluna pelo nome da coluna que você deseja atualizar, para adaptar ao seu banco de dados e estrutura de tabelas.

Espero que as orientações sejam um bom ponto de partida para você.

Bons estudos!

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

Muito obrigado.