Tenho a lógica SQL abaixo composta de três instruções where, cada uma separada por "OR". Meu objetivo é recuperar todos os dados dentro da primeira instrução where, mas excluir apenas os registros que atendem aos critérios nas duas segundas instruções where. Quando executo como está, obtenho todos os registros. Acho que é por causa da primeira instrução where, mas não consigo descobrir como alterá-la para que exclua apenas os registros que atendem aos critérios nas duas últimas instruções where. Qualquer ajuda que você possa fornecer para reescrever essa lógica é muito apreciada.
WHERE
(
(ord_billto = 'CATGRI'
AND o.ord_status = 'CMP'
AND o.ord_startdate >= @StartDate and o.ord_startdate < @EndDate+1
AND o.ord_invoicestatus = 'XIN')
OR
(o.ord_billto = 'CATGRI'
AND o.ord_status = 'CMP'
AND o.ord_startdate >= @StartDate and o.ord_startdate < @EndDate+1
AND o.ord_invoicestatus = 'XIN'
AND o.ord_revtype4 IN ('GRIFF3')
AND s.cmp_id NOT IN ('CATLAF10','ORDBEL', 'SKYLIV','SKYPLY'))
OR
(o.ord_billto = 'CATGRI'
AND o.ord_status = 'CMP'
AND o.ord_startdate >= @StartDate and o.ord_startdate < @EndDate+1
AND o.ord_invoicestatus = 'XIN'
AND o.ord_revtype4 IN ('GRIFF1')
AND s.cmp_id NOT IN ('CATGRI02','CATWAC01'))
)
Para "recuperar todos os dados dentro da primeira [condição], mas excluir ... aqueles registros que atendem aos critérios nas duas segundas [condições]", tente:
(Condições redundantes foram eliminadas.)
Ou equivalentemente: