janandfu 0 Denunciar post Postado Junho 15, 2018 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! Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Junho 15, 2018 WHERE R.DT_APROVACAO IS NOT NULL Creio ser apenas isto. Compartilhar este post Link para o post Compartilhar em outros sites
janandfu 0 Denunciar post Postado Junho 15, 2018 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
Motta 645 Denunciar post Postado Junho 15, 2018 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
Motta 645 Denunciar post Postado Junho 16, 2018 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
janandfu 0 Denunciar post Postado Junho 16, 2018 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