DUVIDA NESTA SELECT

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Seg, 12 Jul 2010 6:23 pm

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?

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:
wilke
Localização: porto velho -ro

Mensagemem Seg, 12 Jul 2010 8:17 pm

n entendi sua dúvida brother


Código: Selecionar todos
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'
victorhugomuniz
Localização: Rio de Janeiro - RJ

Jesus está voltando, volte antes para Ele.

Imagem JavaBlackBelt

Mensagemem Ter, 13 Jul 2010 8:01 am

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

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'
AND RL.NU_LOTE_CONTABIL = '01010101';


Verifica essas informações desses registros se tem algum tipo C.
diego_amoroso
Localização: Americana - SP

Mensagemem Ter, 13 Jul 2010 9:29 am

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
Localização: porto velho -ro

Mensagemem Ter, 13 Jul 2010 9:39 am

amigo repondendo a sua pergunta, não tem dados com C mas no lote que ele possui tem esses dados.
wilke
Localização: porto velho -ro

Mensagemem Ter, 13 Jul 2010 10:15 am

Pra podermos te ajudar, posta a estrutura das tabelas envolvidas e dados de exemplo.
Diego_Mello
Localização: Igrejinha - RS

Diego Mello
Igrejinha - RS
www.twitter.com/diegolmello

Mensagemem Ter, 13 Jul 2010 1:43 pm

essa e a tabela que tem os dois lancamentos o credito e o debito
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
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
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(*),
wilke
Localização: porto velho -ro

Mensagemem Ter, 13 Jul 2010 4:19 pm

Retirando essas duas condições

AND MP.CD_LOTE_BANCO_PAGAR = '050505'
AND RL.NU_LOTE_CONTABIL = '01010101';

ele traz algum tipo 'C' ????
SergioLBJr
Localização: Parobé - RS

Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Mensagemem Ter, 13 Jul 2010 6:44 pm

no lote ele traz, mas nessa select , ele não traz
wilke
Localização: porto velho -ro

Mensagemem Ter, 13 Jul 2010 11:07 pm

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
SergioLBJr
Localização: Parobé - RS

Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Mensagemem Qua, 14 Jul 2010 2:59 pm

O que você define como lote? :?:
fsitja
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

Mensagemem Qua, 14 Jul 2010 3:52 pm

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?
wilke
Localização: porto velho -ro

Mensagemem Qua, 14 Jul 2010 9:37 pm

Primeiro..

Considerando que os campos LC.NU_LOTE_CONTABIL e 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:

Código: Selecionar todos
select count(1)
from   TB_LANCAMENTO_CONTABIL LC
where  LC.NU_LOTE_CONTABIL    = 01010101
and    LC.FL_TIPO_LANCAMENTO  = 'C'

Retorna que resultado?

Código: Selecionar todos
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?

Código: Selecionar todos
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.
rogenaro
Localização: Londrina - PR

Rafael O. Genaro

Mensagemem Qui, 15 Jul 2010 8:52 am

Amigo valeu essa select ela salvou a patria
obrigado.Deus te abençoe
wilke
Localização: porto velho -ro


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem


Voltar para SQL

Quem está online

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