Column that receives a result if the condition is true

Asked

Viewed 49 times

0

SELECT
DISTINCT P.CD_PACIENTE
, P.NM_PACIENTE
, DECODE (P.TP_SEXO, 'M', 'MASCULINO',
                     'F', 'FEMININO', 
                     'I', 'INDEFINIDO') SEXO

, TRUNC(P.DT_NASCIMENTO) DT_NASCIMENTO
, (SELECT FN_IDADE (P.DT_NASCIMENTO, 'a A / m M / d D' ) FROM DUAL) IDADE_PACIENTE
, A.CD_ATENDIMENTO
, A.DT_ATENDIMENTO
, (SELECT FN_IDADE (A.DT_ATENDIMENTO, 'a A / m M / d D' ) FROM DUAL) DIAS_INTERNADO
, PE.CD_PRESTADOR --PRESTADOR DO ATENDIMENTO
, PE.NM_PRESTADOR
, L.CD_LEITO --LEITO DO PACIENTE
, L.DS_LEITO
, UI.CD_UNID_INT                             CD_UNIDADE_INTERNACAO--UNIDADE DE INTERNAÇÃO VINCULADA A INTERNAÇÃO
, UI.DS_UNID_INT                             UNIDADE_INTERNACAO
, (SELECT S.NM_SETOR FROM SETOR S WHERE UI.CD_SETOR = S.CD_SETOR) AS SETOR_UNIDADE_INTERNACAO --SETOR DA UNIDADE DE INTERNAÇÃO
, E.CD_ESPECIALID                            CD_ESPEC_ATENDIMENTO--ESPECIALIDADE VINCULADA AO MÉDICO PRESTADOR DO ATENDIMENTO
, E.DS_ESPECIALID                            ESPEC_ATENDIMENTO
, NULL STATUS

FROM LEITO L
JOIN ATENDIME A     ON A.CD_LEITO         = L.CD_LEITO
JOIN UNID_INT UI    ON UI.CD_UNID_INT     = L.CD_UNID_INT
JOIN SETOR S        ON S.CD_SETOR         = UI.CD_SETOR
JOIN PACIENTE P     ON P.CD_PACIENTE      = A.CD_PACIENTE
JOIN ESP_MED EM     ON EM.CD_PRESTADOR    = A.CD_PRESTADOR --ESPECIALIDADE DO ATENDIMENTO
JOIN ESPECIALID E   ON E.CD_ESPECIALID    = A.CD_ESPECIALID --SE COLOCAR P.CD_PRESTADOR IRÁ RETORNAR MAIS RESULTADOS, POIS UM PRESTADOR PODE TER MAIS DE UMA ESPECIALIDADE.
JOIN PRESTADOR PE   ON PE.CD_PRESTADOR    = A.CD_PRESTADOR   

WHERE A.TP_ATENDIMENTO = 'I'
AND A.CD_MOT_ALT IS NULL
--AND A.CD_MULTI_EMPRESA
AND A.CD_ATENDIMENTO = 773

I want when the code of cd_unid_interncao=64 and cd_especialid=63 the column STATUS receive 1; if not, 0.

1 answer

3


As the condition is the result of comparing more than one column you should make use of one searched case statement, namely, a Case When:

Sqlfiddle - Online example:

SELECT 
 (CASE WHEN cd_unid_interncao=64 and cd_especialid=63 THEN 1
   ELSE 0 
 END) Status
FROM Exemplo;

inserir a descrição da imagem aqui

Oracle searches from left to right until you find a true condition occurrence and returns return_expr.

If no condition is found to be true and there is an ELSE clause, the Oracle will return else_expr. Otherwise, Oracle will return null.

Example:

SELECT
DISTINCT P.CD_PACIENTE
, P.NM_PACIENTE
, DECODE (P.TP_SEXO, 'M', 'MASCULINO',
                     'F', 'FEMININO', 
                     'I', 'INDEFINIDO') SEXO

, TRUNC(P.DT_NASCIMENTO) DT_NASCIMENTO
, (SELECT FN_IDADE (P.DT_NASCIMENTO, 'a A / m M / d D' ) FROM DUAL) IDADE_PACIENTE
, A.CD_ATENDIMENTO
, A.DT_ATENDIMENTO
, (SELECT FN_IDADE (A.DT_ATENDIMENTO, 'a A / m M / d D' ) FROM DUAL) DIAS_INTERNADO
, PE.CD_PRESTADOR --PRESTADOR DO ATENDIMENTO
, PE.NM_PRESTADOR
, L.CD_LEITO --LEITO DO PACIENTE
, L.DS_LEITO
, UI.CD_UNID_INT                             CD_UNIDADE_INTERNACAO--UNIDADE DE INTERNAÇÃO VINCULADA A INTERNAÇÃO
, UI.DS_UNID_INT                             UNIDADE_INTERNACAO
, (SELECT S.NM_SETOR FROM SETOR S WHERE UI.CD_SETOR = S.CD_SETOR) AS SETOR_UNIDADE_INTERNACAO --SETOR DA UNIDADE DE INTERNAÇÃO
, E.CD_ESPECIALID                            CD_ESPEC_ATENDIMENTO--ESPECIALIDADE VINCULADA AO MÉDICO PRESTADOR DO ATENDIMENTO
, E.DS_ESPECIALID                            ESPEC_ATENDIMENTO
, (CASE WHEN cd_unid_interncao=64 and cd_especialid=63 THEN 1
   ELSE 0 
 END)                                        Status

FROM LEITO L
JOIN ATENDIME A     ON A.CD_LEITO         = L.CD_LEITO
JOIN UNID_INT UI    ON UI.CD_UNID_INT     = L.CD_UNID_INT
JOIN SETOR S        ON S.CD_SETOR         = UI.CD_SETOR
JOIN PACIENTE P     ON P.CD_PACIENTE      = A.CD_PACIENTE
JOIN ESP_MED EM     ON EM.CD_PRESTADOR    = A.CD_PRESTADOR --ESPECIALIDADE DO ATENDIMENTO
JOIN ESPECIALID E   ON E.CD_ESPECIALID    = A.CD_ESPECIALID --SE COLOCAR P.CD_PRESTADOR IRÁ RETORNAR MAIS RESULTADOS, POIS UM PRESTADOR PODE TER MAIS DE UMA ESPECIALIDADE.
JOIN PRESTADOR PE   ON PE.CD_PRESTADOR    = A.CD_PRESTADOR   

WHERE A.TP_ATENDIMENTO = 'I'
AND A.CD_MOT_ALT IS NULL
--AND A.CD_MULTI_EMPRESA
AND A.CD_ATENDIMENTO = 773
  • @Don'tPanic only one point of attention, would be a OR nay AND

  • There’s no way a column has two values.

  • 1

    @Don'tPanic You are right, I did not heed the question, I had only seen the answer here, that there in the case he is using only cd_unid_interncao in Case.

  • 1

    Already corrected, thanks for the warning, in a first reading of the question I understood that it was a same column

  • It worked exactly as I wanted, thank you all very much!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.