DUVIDA NESTA SELECT

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
wilke
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 46
Registrado em: Sex, 23 Nov 2007 9:26 am
Localização: porto velho -ro

PESSOAL ESSA SELECT , ELA ME TRAZ SOMENTE OS DADOS COM O FL_TIPO_LANCAMENTO='D', SENDO QUE TERIA QUE TRAZER OS TIPOS C E NÃO ESTÃO TRAZENDO. VOCÊS PODERIA ME AJUDAR?

Selecionar tudo

SELECT MP.CD_PAGAR,
        MP.DT_LIQUIDACAO,
        MP.VL_PARCELA,
        RL.NU_LANCAMENTO_CONTABIL,
        RL.NU_LOTE_CONTABIL,
        RL.CD_LOJA,
        RL.CD_TIPO,
        LC.FL_TIPO_LANCAMENTO
  FROM TB_MOV_PAGAR MP,TB_RELAC_CONTABIL RL,TB_LANCAMENTO_CONTABIL LC
    WHERE MP.CD_LOTE_BANCO_PAGAR='050505' AND
       MP.CD_PAGAR=RL.CD_DOCUMENTO  AND
       LC.NU_LOTE_CONTABIL=RL.NU_LOTE_CONTABIL AND
       RL.NU_LANCAMENTO_CONTABIL=LC.NU_LANCAMENTO_CONTABIL AND
       RL.NU_LOTE_CONTABIL='01010101'
:cry:
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

n entendi sua dúvida brother

Selecionar tudo

SELECT MP.CD_PAGAR, 
MP.DT_LIQUIDACAO, 
MP.VL_PARCELA, 
RL.NU_LANCAMENTO_CONTABIL, 
RL.NU_LOTE_CONTABIL, 
RL.CD_LOJA, 
RL.CD_TIPO, 
LC.FL_TIPO_LANCAMENTO 
FROM TB_MOV_PAGAR MP,TB_RELAC_CONTABIL RL,TB_LANCAMENTO_CONTABIL LC 
WHERE MP.CD_LOTE_BANCO_PAGAR='050505' AND 
MP.CD_PAGAR=RL.CD_DOCUMENTO AND 
LC.NU_LOTE_CONTABIL=RL.NU_LOTE_CONTABIL AND 
RL.NU_LANCAMENTO_CONTABIL=LC.NU_LANCAMENTO_CONTABIL AND 
RL.NU_LOTE_CONTABIL='01010101' AND
FL_TIPO_LANCAMENTO='D' or
FL_TIPO_LANCAMENTO='C' or
FL_TIPO_LANCAMENTO='E'
diego_amoroso
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 17
Registrado em: Qua, 07 Jul 2010 2:53 pm
Localização: Americana - SP

Cara, da uma olhada nesse filtro que você está usando e nas informações que você tem nas tabelas.

Selecionar tudo

SELECT MP.CD_PAGAR,
            MP.DT_LIQUIDACAO,
            MP.VL_PARCELA,
            RL.NU_LANCAMENTO_CONTABIL,
            RL.NU_LOTE_CONTABIL,
            RL.CD_LOJA,
            RL.CD_TIPO,
            LC.FL_TIPO_LANCAMENTO
   FROM TB_MOV_PAGAR                   MP,
            TB_RELAC_CONTABIL           RL,
            TB_LANCAMENTO_CONTABIL LC
 WHERE MP.CD_PAGAR = RL.CD_DOCUMENTO 
     AND LC.NU_LOTE_CONTABIL = RL.NU_LOTE_CONTABIL  
     AND RL.NU_LANCAMENTO_CONTABIL = LC.NU_LANCAMENTO_CONTABIL
     AND MP.CD_LOTE_BANCO_PAGAR = '050505'    ---- HERE!!!!
     AND RL.NU_LOTE_CONTABIL = '01010101';      ----HERE!!!
Verifica essas informações desses registros se tem algum tipo C.
wilke
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 46
Registrado em: Sex, 23 Nov 2007 9:26 am
Localização: porto velho -ro

amigo, e que na verdade , ele só traz os que estão em D , eu queria fazer uma select do tipo union all ,pra ver ser a select traz os dois D E C a forma como você colocou, eu já fiz , mas não dar certo. ele se relaciona por meio de um numero de lote. você entendeu?
wilke
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 46
Registrado em: Sex, 23 Nov 2007 9:26 am
Localização: porto velho -ro

amigo repondendo a sua pergunta, não tem dados com C mas no lote que ele possui tem esses dados.
Diego_Mello
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 229
Registrado em: Sex, 05 Set 2008 2:59 pm
Localização: Igrejinha - RS
Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

Pra podermos te ajudar, posta a estrutura das tabelas envolvidas e dados de exemplo.
wilke
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 46
Registrado em: Sex, 23 Nov 2007 9:26 am
Localização: porto velho -ro

essa e a tabela que tem os dois lancamentos o credito e o debito

Selecionar tudo

TB_LANCAMENTO_CONTABIL (
  NU_LANCAMENTO_CONTABIL NUMBER(*) NOT NULL,
  NU_LOTE_CONTABIL NUMBER(*) NOT NULL,
  DT_LANCAMENTO_CONTABIL DATE NOT NULL,
  CD_LOJA VARCHAR2(3) NOT NULL,
  CD_TIPO VARCHAR2(3) NOT NULL,
  CD_CONTA_CONTABIL VARCHAR2(10) NOT NULL,
  CD_HISTORICO_CONTABIL VARCHAR2(4) NOT NULL,
  DS_HISTORICO_CONTABIL VARCHAR2(200),
  VL_LANCAMENTO NUMBER(*) NOT NULL,
  FL_TIPO_LANCAMENTO VARCHAR2(1),
  NR_BANCO VARCHAR2(12),
  DT_TRANSACAO DATE,
  CD_USER VARCHAR2(30),
  CD_LOJA_LANCAMENTO VARCHAR2(3) NOT NULL,
  NU_OPERACAO NUMBER(*)

essa tabela ela se relaciona com a tb_lancamento_contabil

Selecionar tudo

TB_RELAC_CONTABIL (
  CD_DOCUMENTO VARCHAR2(20) NOT NULL,
  NU_LANCAMENTO_CONTABIL NUMBER(*) NOT NULL,
  NU_LOTE_CONTABIL NUMBER(*) NOT NULL,
  DT_LANCAMENTO_CONTABIL DATE NOT NULL,
  CD_LOJA VARCHAR2(3) NOT NULL,
  CD_TIPO VARCHAR2(3) NOT NULL,
  FL_TIPO_LANCAMENTO VARCHAR2(1) NOT NULL,
  NR_BANCO VARCHAR2(30),
  DT_TRANSACAO DATE,
  CD_USER VARCHAR2(30)
e essa tabela se relaciona com tb_relac_contabil pelo cd_pagar com cd_documento ,onde eu seelciono o lote com o campo cd_lote_banco_pagar

Selecionar tudo

TB_MOV_PAGAR (
  CD_PAGAR VARCHAR2(10) NOT NULL,
  CD_PARCELA VARCHAR2(7) NOT NULL,
  CD_BANCO VARCHAR2(6),
  CD_AGENCIA VARCHAR2(6),
  NU_CONTA VARCHAR2(20),
  DT_VENCIMENTO DATE NOT NULL,
  VL_PARCELA NUMBER(16, 2) NOT NULL,
  VL_JUROS NUMBER(16, 2),
  VL_DESCONTO NUMBER(16, 2),
  DT_LIQUIDACAO DATE,
  CD_FORMA_PAGTO VARCHAR2(6),
  CD_COND_PAGTO VARCHAR2(6),
  CD_LOJA_PAGADORA VARCHAR2(3),
  VL_DESC_ANTECIPADO NUMBER(16, 2),
  VL_DESP_PAGTO NUMBER(16, 2),
  NU_EAN VARCHAR2(50),
  FL_POSICAO VARCHAR2(1) DEFAULT 'D',
  NU_DOCUMENTO VARCHAR2(20),
  CD_TIPO_DOCUMENTO VARCHAR2(6),
  DS_OBS VARCHAR2(200),
  CD_CONTA_BANCO VARCHAR2(10),
  NU_CHEQUE VARCHAR2(20),
  FL_CONTABILIZADO VARCHAR2(1) DEFAULT 'N',
  NR_BANCO VARCHAR2(12),
  DT_TRANSACAO DATE,
  CD_USER VARCHAR2(30),
  NU_BORDERO VARCHAR2(12),
  CD_BANCO_PREVISAO_PAGTO VARCHAR2(6),
  FL_ENCERRAMENTO_CONTABIL VARCHAR2(1),
  CD_MOV_PAGAR NUMBER(*) NOT NULL,
  CD_LOJA VARCHAR2(3),
  VL_DEVOLUCAO NUMBER(*),
  DT_VENCIMENTO_BOLETA DATE,
  FL_TIPO_PAGAMENTO VARCHAR2(1),
  CD_MOEDA VARCHAR2(10),
  VL_MOEDA NUMBER(16, 4),
  FL_LIBERA_PAGAMENTO VARCHAR2(1),
  FL_CARENCIA VARCHAR2(1),
  VL_ENCARGO NUMBER(16, 2),
  VL_RETENCAO NUMBER(16, 2),
  CD_LOTE_BANCO_PAGAR NUMBER(*),
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Retirando essas duas condições

Selecionar tudo

AND MP.CD_LOTE_BANCO_PAGAR = '050505'
AND RL.NU_LOTE_CONTABIL = '01010101';
ele traz algum tipo 'C' ????
wilke
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 46
Registrado em: Sex, 23 Nov 2007 9:26 am
Localização: porto velho -ro

no lote ele traz, mas nessa select , ele não traz
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Cara não to te entendendo..

O que é este seu lote, é um select full nas tabelas???

Se apenas com os joins o teu select não está retornando quer dizer que os registros não existem nada correspondente nas tabelas
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

O que você define como lote? :?:
wilke
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 46
Registrado em: Sex, 23 Nov 2007 9:26 am
Localização: porto velho -ro

o lote seria um numero x que tambem tem na tb_rela_contabil, e tb_lancamento_contabil. sendo que a os numero de documento se relaciona com tb_relac_contabil , referente a tb_mov_pagar que ea cd_pagar.
você entendeu?
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro

Primeiro..

Considerando que os campos

Selecionar tudo

LC.NU_LOTE_CONTABIL
e

Selecionar tudo

MP.CD_LOTE_BANCO_PAGAR 
são number, por que os parâmetros estão como varchar, prefixados com 0 à esquerda?
Não deve ser o problema, visto que a consulta retorna registros (LC.FL_TIPO_LANCAMENTO igual a 'D', como você mencionou), mas certamente isso virá a causar problemas eventualmente.


Agora, para entender o que está ocorrendo, nada melhor que verificar os seus dados:

Selecionar tudo

select count(1) 
from   TB_LANCAMENTO_CONTABIL LC 
where  LC.NU_LOTE_CONTABIL    = 01010101
and    LC.FL_TIPO_LANCAMENTO  = 'C'
Retorna que resultado?

Selecionar tudo

select count(1) 
from   TB_LANCAMENTO_CONTABIL LC 
where  LC.NU_LOTE_CONTABIL    = 01010101
and    LC.FL_TIPO_LANCAMENTO  = 'C'
and    exists
(
  select 1 
  from   TB_RELAC_CONTABIL RL
  where  LC.NU_LOTE_CONTABIL       = RL.NU_LOTE_CONTABIL 
  AND    RL.NU_LANCAMENTO_CONTABIL = LC.NU_LANCAMENTO_CONTABIL
)
Retorna o que?

Selecionar tudo

select count(1) 
from   TB_LANCAMENTO_CONTABIL LC 
where  LC.NU_LOTE_CONTABIL    = 01010101
and    LC.FL_TIPO_LANCAMENTO  = 'C'
and    exists
(
  select 1 
  from   TB_RELAC_CONTABIL RL
  where  LC.NU_LOTE_CONTABIL       = RL.NU_LOTE_CONTABIL 
  AND    RL.NU_LANCAMENTO_CONTABIL = LC.NU_LANCAMENTO_CONTABIL
  and    exists
  ( 
    select 1 
    from   TB_MOV_PAGAR MP
    where  MP.CD_LOTE_BANCO_PAGAR = 050505
    and    MP.CD_PAGAR			  = RL.CD_DOCUMENTO 
  )
)
Retorna o que?

Como as colunas com Join são todas NOT NULL, descarta-se a possibilidade de que um dos campos está vazio, portanto:

- Ou não existem registros para o lote em questão (NU_LOTE_CONTABIL = 01010101 ) com FL_TIPO_LANCAMENTO = 'C';

- Ou não existem registros em TB_RELAC_CONTABIL com FL_TIPO_LANCAMENTO = 'C' que possua registro correspondente em TB_LANCAMENTO_CONTABIL;

- Ou, finalmente, não existem registros em TB_RELAC_CONTABIL com FL_TIPO_LANCAMENTO = 'C' que possua registro correspondente em TB_LANCAMENTO_CONTABIL e que possua registro em
TB_MOV_PAGAR, relacionado com TB_RELAC_CONTABIL por meio do número de documento com MP.CD_LOTE_BANCO_PAGAR = 50505.
wilke
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 46
Registrado em: Sex, 23 Nov 2007 9:26 am
Localização: porto velho -ro

Amigo valeu essa select ela salvou a patria
obrigado.Deus te abençoe
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes