Как реализовать несколько предложений if с использованием логического оператора в Postgresql - PullRequest
0 голосов
/ 14 января 2020

У меня есть 3 таблицы, и я должен проверить количество определенных записей в соответствии с приведенным ниже условием.

IF

count(T1DM DX = 0) & COUNT (T2DM DX = 0) & COUNT (T2DM MEDS >= 1) & COUNT(ABC > 6.5 OR DEF > 11.1 OR GHI > 7) >= 1 THEN "CASE"

ELSE

DO NOTHING

**OR** 

IF

count(T1DM DX = 0) & COUNT (T2DM DX >=1) & COUNT (T1DM MEDS = 0) & COUNT (T2DM MEDS = 0) & COUNT(ABC > 6.5 OR DEF > 11.1 OR GHI > 7) >= 1 THEN "CASE"

ELSE

DO NOTHING

Мои операторы создания таблиц приведены ниже

CREATE TABLE DX(
   DX_id  serial Primary Key
   person_id NOT NULL,
   condition_name VARCHAR (50) UNIQUE NOT NULL,
   cond_id VARCHAR (355) UNIQUE NOT NULL,
   condition_start_date TIMESTAMP NOT NULL,
   condition_end_date TIMESTAMP NOT NULL
);


CREATE TABLE RX(
   RX_id serial Primary Key
   person_id NOT NULL,
   presciption_name VARCHAR (50) UNIQUE NOT NULL,
   presc_id VARCHAR (355) UNIQUE NOT NULL,
   pres_start_date TIMESTAMP NOT NULL,
   pres_end_date TIMESTAMP 
);


CREATE TABLE Lab(
   Lab_id serial Primary Key
   person_id NOT NULL,
   Test_name VARCHAR (50) UNIQUE NOT NULL,
   Test_id VARCHAR (355) UNIQUE NOT NULL,
   Test_start_date TIMESTAMP NOT NULL,
   Test_value FLOAT
);

Вот что Я пытался

IF ((select count(*) from public.DX where cond_id = 21) == 0 AND (select count(*) from public.DX where cond_id = 23) == 0 AND (select count(*) from public.RX where presc_id = 33) >=1
                                 AND (select count(*) from (select * from public.Lab where test_id in (41,42,43)) where test_value > 6.5)) THEN "FOUND"
ELSE
     DO NOTHING

Но это выдает ошибку. Может ли кто-нибудь помочь мне реализовать множественное условие if с логическими операторами AND / OR между ними?

Указывает на примечание

1) Таблица DX может иметь несколько условий. Основываясь на блок-схеме, мы должны искать T1DM и T2DM. Мы можем идентифицировать их, используя cond_ids (T1DM - 21, T2DM - 23)

2) В таблице RX может быть несколько рецептов лекарств. На основе блок-схемы нам нужно искать лекарства T1DM и T2DM. Мы можем идентифицировать их, используя presc_ids (лекарства T1DM - 31, лекарства T2DM - 33)

3) Лабораторный стол может иметь несколько результатов измерений / испытаний. На основе блок-схемы ненормальная лаборатория определяется нарушением порога для любого из 3 измерений, перечисленных ниже.

 a) Three measurements - ABC, DEF, GHI. Test_ids for these three are 41,42,43
 b) ABC > 6.5
 c) DEF > 11.1
 d) GHI > 7

1 Ответ

2 голосов
/ 14 января 2020

Вы можете написать это, используя CASE выражения вместе с существующими логами c:

CASE WHEN
    NOT EXISTS (SELECT 1 FROM public.DX WHERE cond_id IN (21, 23)) AND
    EXISTS (SELECT 1 FROM public.DX WHERE presc_id = 33) AND
    EXISTS (SELECT 1 FROM public.Lab WHERE test_id IN (41,42,43) AND test_value > 6.5)
     THEN 'FOUND' END;
...