select com elsif

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Joao Moraes
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 44
Registrado em: Qua, 04 Jan 2006 9:12 am
Localização: Botucatu - SP
Contato:

ola a todos

preciso fazer um select que procure um proceddimento realizado em um paciente por exemplo:

se procedimento =111046 then 1
se procedimento =111047 then 2
se procedimento =111048 then 4
se procediemnto = 111049 then 4
se não
procura data do ultimo atendimento em q o procedimento tenha sido o 1110 48 ou 111049 e se a data for <= 5 anos then 4


obs: os proceimentos acima são de vacinas e indicam se o paciente tomou a 1ª dose(1) ou a 2ª dose(2) e se tomou a 3ª ou reforço(4) que siguinifica estar imune. Mas caso não tenha tomado, dentro de um periodo , então verifica-se se nos ultimos 5 anos ele tomou a 3º dose ou o reforço; condição que também é considerado imune a doença.


desde já agradeço a ajuda. Todas a minha duvidas tenho encontrado aqui no site. já divulgeui pra varias pessoas inclisive para uma turma de certificaçaão oracle q esta acontecendo em sp (senac) e ficaram muito satisifeito com o site, inclusive a minha chefe, q esta fazendo este curso. Então parabens!!!
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

asarmento
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Qui, 27 Abr 2006 8:50 pm
Localização: Salvador - BA

Olá, João Moraes

Veja o script abaixo:

Selecionar tudo

DECLARE
li_procedimento number := 111048;
ld_data             date := to_date('18/01/2000', 'DD/MM/YYYY');
v_resultado       varchar2(30); 
BEGIN
select case when li_procedimento = 111046 then
           '1ª Dose'
       else
           case when li_procedimento = 111047 then
               '2ª Dose'    
           else
               case when li_procedimento = 111048 then
                   '3ª Dose'
               else
                   case when li_procedimento = 111049 then
                       '4ª Dose'
                   else
                       case when months_between(sysdate, ld_data) <= 60 then
                           '4ª Dose'
                       else
                            'Última data tem mais de 5 anos'
                       end
                   end
               end
           end
       end
  into v_resultado
  from dual;
  
dbms_output.put_line('Resultado: ' || v_resultado);
END;
PS1: O li_procedimento seria uma coluna da tabela.

PS2: Em seu caso, ao invés do ld_data, poderia ser usado uma função que busque a data do ultimo atendimento em que o procedimento tenha sido o 111048 ou 111049. ,

PS3: É uma pena, mas quando enviamos a msg, perdemos a identação.


Espero ter ajudado!

Atenciosamente,
Álvaro
Responder
  • Informação
  • Quem está online

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