Tenho duas tabelas: CTRELCTO (Lançamentos) e CTRELBXA (Baixas). Eu preciso selecionar todos os registros da tabela de Lançamentos que estão ligados na tabela de Baixas, inclusive aqueles registros que NÃO estão na tabela de baixas. Os registros estão ligados entre essas duas tabelas por algumas chaves primárias e a chave que uso é a ID_CTRE. Se fossem 2 Select's, tudo bem, eu consigo a informação que preciso. O problema é que necessito de apenas 1 Select para recuperar estas duas informações. Para simplificar: Preciso saber tudo que está baixado (select * from ctrelcto inner join ctrelbxa) e tudo que não está baixado (select * from ctrelcto not in (select ID_CTRE from ctrelbxa)).
Estes são os dois Selects:
// Sem baixa SELECT Lancamentos.CR_NUME as Requisicao, Lancamentos.CR_PARC as Parcela, Lancamentos.CR_DTEM as Emissao, Lancamentos.CR_DTVE as Vencimento, Sum(Lancamentos.CR_VALO) Over (Partition BY CR_NUME) as Debito FROM CTRELCTO Lancamentos INNER JOIN MLDICADT Cadastros ON Lancamentos.ID_CADT = Cadastros.ID_CADT WHERE Cadastros.CA_CODI = 50 AND Lancamentos.CR_PARC <> 'CHD' AND Lancamentos.ID_CTRE NOT IN (SELECT ID_CTRE FROM CTRELBXA) // Com baixa, porém não necessariamente totalmente baixado SELECT Lancamentos.CR_NUME as Requisicao, Lancamentos.CR_PARC as Parcela, Lancamentos.CR_DTEM as Emissao, Lancamentos.CR_DTVE as Vencimento, Sum(Lancamentos.CR_VALO) Over (Partition BY CR_NUME) as Debito, Sum(Baixas.CR_VALO) Over (Partition BY CR_NUME) as Credito, Sum(Baixas.CR_DESC) Over (Partition BY CR_NUME) as Desconto FROM CTRELBXA Baixas INNER JOIN CTRELCTO Lancamentos ON Baixas.ID_CTRE = Lancamentos.ID_CTRE INNER JOIN MLDICADT Cadastros ON Lancamentos.ID_CADT = Cadastros.ID_CADT AND Baixas.ID_EMPR = Cadastros.ID_EMPR AND Lancamentos.CR_PARC <> 'CHD' AND Cadastros.CA_CODI = 50
E esse é o Select que preciso. Tentei unificar, mas não tive bons resultados. Ficou de fora tudo não tem baixa:
// Abertas e baixadas totalmente ou parcialmente SELECT DISTINCT Lancamentos.CR_NUME as Requisicao, Lancamentos.CR_PARC as Parcela, Lancamentos.CR_DTEM as Emissao, Lancamentos.CR_DTVE as Vencimento, Sum(Lancamentos.CR_VALO) Over (Partition BY CR_NUME) as Debito, Sum(Baixas.CR_VALO) Over (Partition BY CR_NUME) as Credito, Sum(Baixas.CR_DESC) Over (Partition BY CR_NUME) as Desconto FROM CTRELBXA Baixas INNER JOIN CTRELCTO Lancamentos ON Baixas.ID_CTRE = Lancamentos.ID_CTRE INNER JOIN MLDICADT Cadastros ON Lancamentos.ID_CADT = Cadastros.ID_CADT WHERE Baixas.ID_EMPR = Cadastros.ID_EMPR AND Lancamentos.CR_PARC <> 'CHD' AND Cadastros.CA_CODI = 50 AND Lancamentos.CR_DTVE = to_date('21/09/2007','dd/mm/yyyy') AND EXISTS (SELECT ID_CTRE FROM CTRELCTO) OR Lancamentos.ID_CTRE NOT IN (SELECT ID_CTRE FROM CTRELBXA)
Qual a melhor maneira para se fazer isso? Como ficaria o Select que preciso?
Muito obrigado,