Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Hiccup

Select com Select em uma coluna

Recommended Posts

Olá pessoal,

Estou montando uma query para resolver o seguinte problema: preciso recuperar o dof_sequence da nota de compra utilizando os dados do documento associado da nota de devolução. Vou explicar melhor.

Quando efetuamos a compra de uma mercadoria, uma nota fiscal é lançada no sistema e essa recebe um dof_sequence, que é um chave única. Se devolvemos essa mercadoria, precisamos associar os dados da nota de compra a nota de devolução, que também tem um dof_sequence. O que descobrimos, é que o dof_sequence da compra é obrigatório estar relacionado no documento associado, o que não acontece. Assim, estou tentando montar uma query para resolver isso. Desde já, acho que deve estar errando na lógica.

select
      a.dof_sequence,
      a.numero,
      b.numero_assoc,
      b.dh_emissao_assoc,
      b.serie_subserie_assoc,
      b.emitente_pfj_codigo_assoc,
      (select dof_sequence from cor_dof
              where numero = lpad(b.numero_assoc,9,'0')
                and dh_emissao = b.dh_emissao_assoc
                and serie_subserie = b.serie_subserie_assoc
                and emitente_pfj_codigo = b.emitente_pfj_codigo_assoc
                and ind_entrada_saida = 'E') dof_sequence
    from cor_dof a, cor_dof_associado b
  where a.dof_sequence = b.dof_sequence
    and a.codigo_do_site = b.codigo_do_site
    and a.ind_entrada_saida = 'S'
    and a.dt_fato_gerador_imposto >= '01-MAR-2015'
    and a.dt_fato_gerador_imposto <= '31-MAR-2015'

Valor retornado pela query acima (apenas uma amostra):

 

Nesse, o dof_sequence da nota de compra foi encontrado ...

 

DOF_SEQUENCE 72020055 NUMERO 2032 NUMERO_ASSOC 400 DH_EMISSAO_ASSOC 06/mar/15 SERIE_SUBSERIE_ASSOC 1 EMITENTE_PFJ_CODIGO_ASSOC 0000085502F DOF_SEQUENCE 71965749

 

 

Já nesse, o dof_sequence da nota de compra não foi encontrado ...

 

DOF_SEQUENCE 71885860 NUMERO 3070 NUMERO_ASSOC 121726 DH_EMISSAO_ASSOC 17/dez/14 SERIE_SUBSERIE_ASSOC 1 EMITENTE_PFJ_CODIGO_ASSOC 0000085232F DOF_SEQUENCE

 

 

Como podem ver, o segundo exemplo não teve o dof_sequence da compra retornado, porém, se eu pegar o select destacado na query anterior e inserir os parâmetros manualmente, ele encontra o dof_sequence:

 

select dof_sequence
    from cor_dof
  where numero = lpad('121726',9,'0')
    and dh_emissao = '17-DEZ-14'
    and serie_subserie = '1'
    and emitente_pfj_codigo = '0000085232F'
    and ind_entrada_saida = 'E'
Resultado:
DOF_SEQUENCE

55495619

 

 

Não sei se estou usando o select dentro do outro de forma errada. Eu fiz o select maior trazer os dados da nota de devolução e documento associado. Com esses dados, a ideia é recuperar o dof_sequence da nota de compra. :huh:

 

Eu já tentei o lpad, ltrim para garantir que o número das notas vão ter o mesmo número de posições. Como alguns são encontrados, outros não, acho que estou errando algum detalhe na lógica. O campo NUMERO nas duas tabelas é um VARCHAR2 (60).

 

Dessa forma, alguém poderia me dar uma força?! ;)

 

Até mais,

Hiccup

Compartilhar este post


Link para o post
Compartilhar em outros sites

O primeiro teste que eu faria seria posto que o subselect faz referencia a uma tabela de proprio select eu colocaria um "alias" no subselect , ate por clareza.

 

Sem entrar no mérito da estrutura do select em si.

 

Segundo nao sei se entendi bem a questao do conteudo de NUMERO faz se é um VARCHAR e contem SEMPREum numerico , talvez algo como

 

TO_NUMBER(TRIM(NUMERO)) = 123345

 

Resolva , mas se houver algo nao numerico vai dar erro

 

Mas isto fara que um evental indice nao seja usado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Motta,

 

Seguindo sua sugestão, encontrei o problema, estava na série da nota -_- , foi só colocar um trim de cada lado que funcionou ... :)

...
and trim(c.serie_subserie) = trim(b.serie_subserie_assoc)
...

Mais uma vez, obrigado pela ajuda ... :D

 

Até mais,

Hiccup

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.