select com elsif

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Seg, 16 Out 2006 5:39 pm

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!!!
Joao Moraes
Localização: Botucatu - SP

Mensagemem Seg, 16 Out 2006 5:43 pm

dr_gori
Localização: Portland, OR USA

Thomas F. G

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

Mensagemem Qui, 18 Jan 2007 1:44 pm

Olá, João Moraes

Veja o script abaixo:

Código: Selecionar todos
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
asarmento
Localização: Salvador - BA


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem


Voltar para SQL

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante