Consulta sem retorno esperado

23/11/2022

0

SQL

Bom dia Pessoal,

Estou precisando da ajuda de voce para resolver uma consulta onde, na Where quando ele não encontrar o resultado tenho que chumbar uma informação no Where

Query:
SELECT TOP 1 MAX(D1_DOC) AS DOCLIB
,D1_VUNIT AS TOTALIT
,D1_COD
,D1_UM
,D1_VUNIT
,D1_EMISSAO
,D1_DOC
,D1_SERIE
,D1_IPI
,D1_PICM
,D1_EMP
,D1_ITEM
,D1_QUANT - SUM(CASE
WHEN ZV_QTD IS NULL
THEN 0
ELSE ZV_QTD
END) AS D1_QUANT
FROM SD1010 SD1
LEFT JOIN SZV010 SZV ON SZV.D_E_L_E_T_ = ' '
AND ZV_NFORI = D1_DOC
AND ZV_COD = D1_COD
WHERE D1_FILIAL IN ('30','72','55','16') AND SD1.D_E_L_E_T_ <> '*'
AND D1_COD = 'AC30728 '
AND D1_TES <> ' '
AND D1_SERIE NOT IN (
'UNT'
,'UN3'
,'DPL'
)
AND D1_TIPO = 'N'
AND D1_FORMUL <> 'S'
AND D1_CF NOT IN (
'1152'
,'2152'
,'1949'
,'2949'
,'1409'
,'2409'
)
AND D1_TES NOT IN (
'037'
,'034'
,'035'
,'039'
,'029'
,'041'
)
GROUP BY D1_COD
,D1_UM
,D1_VUNIT
,D1_EMISSAO
,D1_DOC
,D1_SERIE
,D1_IPI
,D1_PICM
,D1_EMP
,D1_ITEM
,D1_QUANT
,D1_QTDEDEV
HAVING D1_QUANT - SUM(CASE
WHEN ZV_QTD IS NULL
THEN 0
ELSE ZV_QTD
END) > 0
AND (D1_QUANT - D1_QTDEDEV) > 0
ORDER BY D1_EMISSAO DESC

Observando o Where:

WHERE D1_FILIAL IN ('30','72','55','16')

Quando ele não encontrar o resultado dentro deste Where tem, ele devera ficar da seguinte maneira: WHERE D1_FILIAL= ('51')

como posso fazer isso?
Wanderson Fernandes

Wanderson Fernandes

Responder

Posts

23/12/2022

Arthur Heinrich

Colocar tudo em uma query só vai tornar a query complexa demais e provavelmente você terá problemas com plano de acesso ruim.

O ideal é dividir em duas partes, executando a query principal e, caso não retorne nada, execute a seguinte.

No banco, daria para fazer o seguinte:

with
query1 as ( select original ),
query2 as ( select modigicado ),
qtde as ( select count(1) qtde from query1 )
select query1.*
from qtde, query1
where
qtde.qtde > 0
union all
select query2.*
from qtde, query2
where
qtde.qtde = 0
Responder

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

Aceitar