SQL сгруппировать по идентификатору для нескольких идентификаторов, используя регистр - PullRequest
0 голосов
/ 25 марта 2020

Я начал со списка пациентов с несколькими кодами (по несколько раз в год), и мне нужно разделить пациентов на группы, основываясь на том, есть ли у них код или комбинация кодов, а те, которые не соответствуют требованиям, исключаются из списка. список. Я уже создал флаги (0,1) для каждого набора кодов. Но проблема в том, что пациент может быть квалифицирован или дисквалифицирован в другом ряду. То, что я хотел бы, - это один ряд на пациента, который затем я могу определить соответствующую группу на пациента. Ниже приведены два способа, которые я пробовал, но я не могу понять, как свернуть по идентификатору и / или новому столбцу.

1-й код, который я пробовал:

SELECT 
      a.*
    into file_2
      from (select code,ID, 'HL2' as grp_1
from file_1
where (code like '%I60.%' or code like '%I61.%')
  and (code not like '%I20.%' and code not like '%I21.%'
  and code not like '%I63.%' and code not like '%I64.%'
  and code not like '%I70.%') a

2-й Код, который я пробовал:

,(case when (HL2='1' and dm='0' and ht='0') then 1 else 0 end) as exclude

ЕСТЬ

ID     CV  CA   HT  DM  HL  PA  HL1 HL2 exclude
1003    0   0   0   0   1   0   0   1   1   
1096    0   0   0   0   1   0   0   1   1   
1096    0   0   0   1   0   0   0   0   0   
1096    0   0   1   0   0   0   0   0   0   
1196    0   0   0   0   0   1   0   0   0   
1196    0   0   1   0   0   0   0   0   0   
1196    1   0   0   0   0   0   0   0   0   
1196    0   0   0   0   1   0   0   1   1   

ХОЧУ

ID     CV  CA   HT  DM  HL  PA  HL1 HL2 exclude
1003    0   0   0   0   1   0   0   1   1   
1096    0   0   1   1   1   0   0   1   0   
1196    1   0   1   0   1   1   0   1   0

1 Ответ

0 голосов
/ 25 марта 2020

Кажется, вы хотите условную агрегацию. Ваш вопрос немного сложен для понимания, но идея такова:

select id, max(cv) as cv,
       . . .
       (case when max(HL2) = 1 and max(dm) =  0 and max(ht) = 0) then 1 else 0 end) as exclude
from file_1
where (code like '%I60.%' or code like '%I61.%') and
      (code not like '%I20.%' and code not like '%I21.%' and
       code not like '%I63.%' and code not like '%I64.%' and
       code not like '%I70.%'
      )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...