2
respostas

[Dúvida] consulta sql - relatorio retorno de dados quando só há um campo unico

Boa noite a todos

fazendo um relatorio em query .. tenho quatro tabelas (3 da area fiscal e 1 area contabil) , estou em duvida a melhor forma de fazer um join sendo que entre todas as tebals so tem um campo em comum entre elas que no caso é COD_ESTB. o resultado obviamente nao esta trazendo o campo unico devido. Estou analisando os dados que esta na tabela contabil (SOFVDCON) vesus a tabela fiscal e itens NFF x NIF (ITENS) X NRF (STATUS DE NOTAS)

SELECT 
    D.COD_ESTB,
    D.COD_NATP,
    D.COD_ZONA,
    D.COD_LOCA_ORIG,
    D.COD_LOCA_DEST,
    D.DES_OPER,
    D.COD_SERI_NOTA,
    D.CGC_NOTA,
    D.VAL_ICMS_ST_REAL,
    D.VAL_ICMS_REAL,
    D.VAL_IPI_REAL,
    A.COD_PEDI,
    A.NUM_SOLC_SERV,
    A.SER_DOCM,
    A.NUM_DOCM,
    B.ENT_SAI,
    A.DAT_EMIS_NF,
    C.CODIGO_FISCAL_E,
    C.CODIGO_FISCAL_S,
    C.COD_OPER_ITEM,
    B.COD_STAT_ATUAL
FROM
    SOFX.SOFVDCON D
JOIN
    SOFX.SOFVDNFF A ON D.COD_ESTB = A.COD_ESTB
JOIN
    SOFX.SOFVDNRF B ON A.SER_DOCM = B.SER_DOCM
                      AND A.NUM_DOCM = B.NUM_DOCM
                      AND A.COD_EMIS_CGC_CPF = B.COD_EMIS_CGC_CPF
JOIN
    SOFX.SOFVDNIF C ON A.SER_DOCM = C.SER_DOCM
                      AND A.NUM_DOCM = C.NUM_DOCM
                      AND A.COD_EMIS_CGC_CPF = C.COD_EMIS_CGC_CPF
WHERE 
    B.COD_STAT_ATUAL IN ('O')
    AND A.DAT_EMIS_NF BETWEEN '2024-02-20' AND '2024-02-24'
    AND D.STATUS = ''
    AND D.CDORIGEM LIKE '%%'
ORDER BY
    A.DAT_EMIS_NF ASC;
2 respostas

Olá, Natalia! Como vai?

Unir múltiplas tabelas em SQL pode ser um desafio, principalmente quando o campo em comum é único. Sugiro, antes de tudo, verificar se o campo COD_ESTB realmente existe em todas as tabelas e se os dados são compatíveis. Às vezes, pode haver um problema de formatação ou tipo de dados que está impedindo o JOIN de funcionar corretamente.

Para possivelmente simplificar sua lógica, outra sugestão é que você refaça a query utilizando subconsultas. Assim, é possível testar aos poucos se a query está no caminho certo para obter o resultado necessário.

Por fim, de forma mais ampla, recomendo que considere a normalização do seu banco de dados. Pode ser que haja anomalias que impeça a junção correta das informações.

Espero que dê tudo certo, Natalia!

Um abraço.

Oi Larissa obrigada pelo retorno

e o campo em comum entre as tabelas é COD_ESTB . Agora por exemplo o campo D.CGC_NOTA (da tabela contabil) eu poderia dizer que seria algo A.COD_EMIS_CGC_CPF (da tabela fiscal) e por ser campo restrito o retorno da minha query esta duplicando pois o join nao esta legal