Retorno de Valores em outras tabelas
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
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
Curtidas 0
Respostas
Arthur Heinrich
06/09/2022
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
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
GOSTEI 0