Объединение двух запросов и создание списка без дубликатов из результата - PullRequest
0 голосов
/ 08 мая 2019

Я надеюсь, что кто-то может помочь мне, так как я очень плохо знаком с SQL и кодированием, и я не могу обернуться вокруг следующей проблемы.

У меня есть таблица, содержащая

пациентаимя, дата рецепта, лекарство (содержащее несколько препаратов, разделенных пробелами).

В большинстве случаев на имя назначается более одной строки, поскольку люди время от времени получают рецепты.

ЧтоЯ хочу составить список всех пациентов, которые когда-либо получали Лекарство A и Лекарство B.

Логически я бы определил всех пациентов, которые когда-либо получали Лекарство A, а также всех пациентов, которые когда-либо получали Лекарство B. Тогда явыбрал бы все записи, которые появляются в обеих группах.Затем я хотел бы создать список всех имен, которые появляются в обеих группах. Как мне это сделать в MS-Access SQL?

Большое спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

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

select  a.name 
from  (
  select distinct name from tablename 
  where ' ' & medication & ' ' like '* medicationA *'
) as a inner join (
  select distinct name from tablename 
  where ' ' & medication & ' ' like '* medicationB *'
) as b
on b.name = a.name 
0 голосов
/ 08 мая 2019

Вы можете использовать group by и having. Предполагая, что дубликатов нет, вы можете сделать:

Select patient_name
from table_name
where medication in ("medication A", "medication B")
group by patient_name
having count(*) = 2;

Если у вас есть дубликаты, вы можете использовать count(distinct) в большинстве баз данных. Но MS Access не поддерживает это. Вместо этого:

select patient_name
from (select distinct patient_name, medication
      from table_name
     ) as pm
where medication in ("medication A", "medication B")
group by patient_name
having count(*) = 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...