Ir para conteúdo

Arquivado

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

janandfu

Não mostrar registros com campo nulo

Recommended Posts

Olá pessoal, por favor preciso de uma ajuda com o select abaixo.

 

Após executar o script, o retorno mostra o registro de um lote que contem 6 exames, e desses 6 exames 1 está pedente de aprovação (data de aprovação "null"), sendo assim o lote não deveria ser apresentado no retorno do select (imagem 1).


Preciso que o retorno do select traga somente lotes que tenham todos os exames aprovados ou seja que não tenha data de aprovação nula dentro daquele lote.

 

SELECT R.NR_LOTE, 
       R.SEQUENCIA_LOTE, 
       R.INSTITUICAO,
       R.DT_RECEBIMENTO,
       R.DT_APROVACAO,   
       R.NR_SEQ_LOCAL,
       R.NR_SEQ_LOCAL_CAIXA 
FROM 
      (SELECT DISTINCT 
       A.NR_LOTE, 
       A.NR_SEQUENCIA SEQUENCIA_LOTE, 
       SUBSTR(OBTER_INSTITUICAO_LOTE_ENT(NR_SEQ_INSTITUICAO), 1, 255) INSTITUICAO,
       A.DT_RECEBIMENTO DT_RECEBIMENTO,
       MAX(G.DT_APROVACAO) DT_APROVACAO,
       Q.NR_SEQ_LOCAL,
       Q.NR_SEQ_LOCAL_CAIXA       
   FROM LOTE_ENT_SECRETARIA A
         ,LOTE_ENT_SEC_FICHA Q
         , PRESCR_PROCEDIMENTO B
         , EXAME_LAB_RESULTADO F
         , EXAME_LAB_RESULT_ITEM G         
   WHERE 1 = 1
         AND  A.NR_SEQUENCIA = Q.NR_SEQ_LOTE_SEC
         AND Q.NR_PRESCRICAO = B.NR_PRESCRICAO
         AND F.NR_PRESCRICAO = B.NR_PRESCRICAO
         AND F.NR_SEQ_RESULTADO = G.NR_SEQ_RESULTADO
         AND Q.NR_SEQ_LOCAL IS NULL
         AND Q.NR_SEQ_LOCAL_CAIXA IS NULL
     AND Q.CD_BARRAS = '1000006388'   
     AND B.IE_STATUS_ATEND > = 35
     AND NOT EXISTS (SELECT  1
          FROM   LOTE_ENT_EXAME_MASSA L
          WHERE  L.NR_SEQ_EXAME = B.NR_SEQ_EXAME
          AND  L.IE_SITUACAO = 'A') 

  GROUP BY A.NR_SEQUENCIA,
           A.NR_LOTE, 
       SUBSTR(OBTER_INSTITUICAO_LOTE_ENT(NR_SEQ_INSTITUICAO), 1, 255),
       A.DT_RECEBIMENTO,
       Q.NR_SEQ_LOCAL,
       Q.NR_SEQ_LOCAL_CAIXA
   ORDER BY SEQUENCIA_LOTE, A.NR_LOTE, INSTITUICAO) R
--WHERE TRUNC(R.DT_APROVACAO) BETWEEN :DATA_INICIO AND :DATA_FINAL

 

 

//

 

Ao excluir o MAX do campo G.DT_APROVACAO o retorno mostra que dentro do lote existe um exame sem aprovação (imagem 2).

 

 

Desde já agradeço!

 

 

1.jpg

2.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

WHERE R.DT_APROVACAO IS NOT NULL

 

Creio ser apenas isto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta boa noite,

 

Não dá certo, como o campo R.DT_APROVACAO  está com MAX e possui 6 linhas de retorno(6 exames no lote), o script identifica o exame que tem a maior data de aprovação.

 

Se eu retirar o max e inserir a condição WHERE R.DT_APROVACAO IS NOT NULL o retorno traz todos os exames do lote que contem a data de aprovação.

 

E o que eu preciso é que não retorne NADA se tiver algum exame com data de aprovação nula.

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, janandfu disse:

 

E o que eu preciso é que não retorne NADA se tiver algum exame com data de aprovação nula.

 

Tentou um NOT EXISTS na query interna !?

Compartilhar este post


Link para o post
Compartilhar em outros sites
 SELECT R.NR_LOTE,
       R.SEQUENCIA_LOTE,
       R.INSTITUICAO,
       R.DT_RECEBIMENTO,
       R.DT_APROVACAO,   
       R.NR_SEQ_LOCAL,
       R.NR_SEQ_LOCAL_CAIXA
FROM
      (SELECT DISTINCT
       A.NR_LOTE,
       A.NR_SEQUENCIA SEQUENCIA_LOTE,
       SUBSTR(OBTER_INSTITUICAO_LOTE_ENT(NR_SEQ_INSTITUICAO), 1, 255) INSTITUICAO,
       A.DT_RECEBIMENTO DT_RECEBIMENTO,
       MAX(G.DT_APROVACAO) DT_APROVACAO,
       Q.NR_SEQ_LOCAL,
       Q.NR_SEQ_LOCAL_CAIXA       
   FROM LOTE_ENT_SECRETARIA A
         ,LOTE_ENT_SEC_FICHA Q
         , PRESCR_PROCEDIMENTO B
         , EXAME_LAB_RESULTADO F
         , EXAME_LAB_RESULT_ITEM G         
   WHERE 1 = 1
         AND  A.NR_SEQUENCIA = Q.NR_SEQ_LOTE_SEC
         AND Q.NR_PRESCRICAO = B.NR_PRESCRICAO
         AND F.NR_PRESCRICAO = B.NR_PRESCRICAO
         AND F.NR_SEQ_RESULTADO = G.NR_SEQ_RESULTADO
         AND Q.NR_SEQ_LOCAL IS NULL
         AND Q.NR_SEQ_LOCAL_CAIXA IS NULL
     AND Q.CD_BARRAS = '1000006388'   
     AND B.IE_STATUS_ATEND > = 35

     AND NOT EXISTS (SELECT  1
          FROM   EXAME_LAB_RESULT_ITEM H
          WHERE  H.NR_SEQ_RESULTADO = G.NR_SEQ_RESULTADO
          AND  H.DT_APROVACAO IS NOT NULL)


     AND NOT EXISTS (SELECT  1
          FROM   LOTE_ENT_EXAME_MASSA L
          WHERE  L.NR_SEQ_EXAME = B.NR_SEQ_EXAME
          AND  L.IE_SITUACAO = 'A')

  GROUP BY A.NR_SEQUENCIA,
           A.NR_LOTE,
       SUBSTR(OBTER_INSTITUICAO_LOTE_ENT(NR_SEQ_INSTITUICAO), 1, 255),
       A.DT_RECEBIMENTO,
       Q.NR_SEQ_LOCAL,
       Q.NR_SEQ_LOCAL_CAIXA
   ORDER BY SEQUENCIA_LOTE, A.NR_LOTE, INSTITUICAO) R

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Motta,

Obrigada pela solução  acima.

 

Realizei testes com a condição NOT EXISTS na query interna e acredito que deu certo.

Obrigada!

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.