Retorno de Valores em outras tabelas

06/09/2022

0

SQL

Boa Tarde Pessoal,

Estou com uma consulta que não esta trazendo todos os dados que tenha na tabela de acordo com meu filtro, e gostaria se possivel da ajuda de voce.

Minha tabela ZB0 é uma tabela de movimentação e a tabela FLUXO_SALDOINICIAL são meus saldos, eu preciso que, na hora da consulta quando não existir a filial de origem no período selecionado ele me traga o saldo da filial mesmo sem movimentação pois o saldo existe e isso não está acontecendo nesta consulta, ele so está trazendo quando há movimentação.

Já usei Inner Joy, Left outer join right outer join e nada me traz o resultado esperado

Segue a consulta abaixo caso alguém possa me ajudar.

SELECT ZB0_FILORI
,CASE
WHEN ZB0_HISTOR = ('Transf. Ref:09/2022')
THEN SUM(ZB0_VLTRAN)
ELSE 0
END AS VALTRANSF
,CASE
WHEN ZB0_HISTOR = ('Estorn. Ref:09/2022')
THEN SUM(ZB0_VLTRAN)
ELSE 0
END AS VALESTOR
,VALOR AS SALDOINICIAL
,VALMOVIM AS VALMOVIMENTO
,VALDISPONIVEL AS VALDISPONIVEL
FROM ZB0010 ZB0
RIGHT JOIN FLUXO_SALDOINICIAL FLX ON FLX.DATA = '20220901'
AND FLX.FILIAL = ZB0_FILORI
WHERE ZB0.D_E_L_E_T_ = ''
AND ZB0_DATA >= '20220901'
GROUP BY ZB0_FILORI
,ZB0_HISTOR
,VALOR
,VALDISPONIVEL
,VALMOVIM
Wanderson Fernandes

Wanderson Fernandes

Responder

Posts

26/12/2022

Arthur Heinrich

Talvez tenha um erro na lógica:

A expressão:

CASE
WHEN ZB0_HISTOR = ('Transf. Ref:09/2022')
THEN SUM(ZB0_VLTRAN)
ELSE 0
END AS VALTRANSF

Talvez devesse ser:

sum(CASE
WHEN ZB0_HISTOR = ('Transf. Ref:09/2022')
THEN ZB0_VLTRAN
ELSE 0
END) AS VALTRANSF

Além disso, quando você adicionou o filtro:

WHERE ...
AND ZB0_DATA >= '20220901'

O banco está entendendo que apenas os dados encontrados na ZB0 serão retornados, pois ele não pode validar o NULL como sendo >= '20220901'

Se a tabela ZB0 é a tabela acessada com outer join, o filtro nela não serve para acesso aos dados. Você pode adicionar a condição NULL:

(...)
WHERE ZB0.D_E_L_E_T_ = ''
AND (ZB0_DATA IS NULL OR ZB0_DATA >= '20220901')
GROUP BY ZB0_FILORI
(...)

E para que os NULLS sejam tratados corretamente, talvez tenha que tratar os valores encontrados:

sum(coalesce(CASE
WHEN ZB0_HISTOR = ('Transf. Ref:09/2022')
THEN ZB0_VLTRAN
ELSE 0
END,0)) AS VALTRANSF
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar