Erro retorno consulta

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Efirmino
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Seg, 26 Jun 2017 11:44 am

Bom dia!

Tenho uma view que me trás todos os procedimentos realizados em um hospital.

Existem pacientes que fazem o procedimento Consulta_Ambulatorial e depois realiza outros procedimentos de exame(ex: endoscopia).
Existem pacientes que não realizam Consulta_Ambulatorial mas realizam outros exames(ex: exame de sangue).

Eu preciso realizar uma consulta que verifique se: Paciente fez consulta ambulatorial ? imprime consulta e os outros exames realizados.
Não fez consulta ambulatorial ? não imprime.

Tentei utilizar as instruções IF-THEN-ELSE mas não tive sucesso.

Alguém pode me dar uma luz?
geovani
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 20
Registrado em: Sáb, 06 Ago 2016 9:22 am
Localização: Joinville-SC
Contato:
Geovani Cristofolini
Consultor de Business intelligence
http://useweknow.com

Opa!
Veja se assim lhe ajuda.

Se for um codigo SQL, no where você valida se existe para o mesmo paciente o procedimento de avaliação ambulatorial.

Exemplo:

Selecionar tudo

and exists (select 1 from view view2 where view2.cd_paciente = view1.cd_paciente and view1.ds_procedimento = 'Avaliação Ambulatorial) 
geovani
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 20
Registrado em: Sáb, 06 Ago 2016 9:22 am
Localização: Joinville-SC
Contato:
Geovani Cristofolini
Consultor de Business intelligence
http://useweknow.com

ops.. Corrigindo...

Se for um codigo SQL, no where você valida se existe para o mesmo paciente o procedimento de Consulta Ambulatorial

Exemplo:

Selecionar tudo

and exists (select 1 from view view2 where view2.cd_paciente = view1.cd_paciente and view1.ds_procedimento = 'Consulta_Ambulatorial') 
Efirmino
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Seg, 26 Jun 2017 11:44 am

Opa, vou testar e já já dou um retorno.
geovani
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 20
Registrado em: Sáb, 06 Ago 2016 9:22 am
Localização: Joinville-SC
Contato:
Geovani Cristofolini
Consultor de Business intelligence
http://useweknow.com

Puts.. mais uma correção, desculpe

Selecionar tudo

and exists (select 1 from view view2 where view2.cd_paciente = view1.cd_paciente and view2.ds_procedimento = 'Consulta_Ambulatorial') 
Efirmino
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Seg, 26 Jun 2017 11:44 am

Obrigado pelo retorno, vou verificar.
Efirmino
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Seg, 26 Jun 2017 11:44 am

O resultado foi semelhante ao um do in/ not in.

Selecionar tudo

select 
         trunc(a.dt_procedimento) dt_procedimento,
         obter_nome_paciente(a.nr_atendimento) nm_paciente,
         a.nm_medico_executor,
         obter_nome_medico(a.cd_medico,'n') nm_medico,
         obter_desc_setor_atend(a.cd_setor_atendimento) setor_atend,
         a.ds_procedimento                 
from 
        procedimento_paciente_v a
where 
        a.dt_procedimento between TO_DATE('12/06/2017 ','dd/mm/yyyy hh24:mi:ss') and TO_DATE('12/06/2017 23:59:59','dd/mm/yyyy hh24:mi:ss') 
        and cd_setor_atendimento in (123,29,118,29,30,22,123,17,49,31,122,56,61,99,4,95,125,50,18)
        and exists (select b.ds_procedimento from procedimento_paciente_v b where b.nr_sequencia = a.nr_sequencia and b.ds_procedimento = 'Consulta Ambulatorial')
        --and a.cd_procedimento in (10101012,10014)
order by 2,3
geovani
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 20
Registrado em: Sáb, 06 Ago 2016 9:22 am
Localização: Joinville-SC
Contato:
Geovani Cristofolini
Consultor de Business intelligence
http://useweknow.com

Bom dia,

Agora com o código ficou mais fácil de compreender.

Você está usando b.nr_sequencia = a.nr_sequencia para fazer a ligação entre as duas tabelas por isso não está dando certo.

Se os exames são referentes ao mesmo atendimento, use o nr_atendimento para fazer a ligação, se for em atendimentos diferentes, você terá que fazer a ligação usando o codigo do paciente e os mesmos filtros de data e setor.

Veja abaixo validando no mesmo atendimento.

Selecionar tudo

select 
         trunc(a.dt_procedimento) dt_procedimento,
         obter_nome_paciente(a.nr_atendimento) nm_paciente,
         a.nm_medico_executor,
         obter_nome_medico(a.cd_medico,'n') nm_medico,
         obter_desc_setor_atend(a.cd_setor_atendimento) setor_atend,
         a.ds_procedimento                 
from 
        procedimento_paciente_v a
where 
        a.dt_procedimento between TO_DATE('12/06/2017 ','dd/mm/yyyy hh24:mi:ss') and TO_DATE('12/06/2017 23:59:59','dd/mm/yyyy hh24:mi:ss') 
        and cd_setor_atendimento in (123,29,118,29,30,22,123,17,49,31,122,56,61,99,4,95,125,50,18)
        and exists (select b.ds_procedimento from procedimento_paciente_v b where b.nr_atendimento = a.nr_atendimento and b.cd_procedimento = 10101012)
        and a.cd_procedimento in (10101012,10014)
order by 2,3
Responder
  • Informação
  • Quem está online

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