结合两个查询并根据结果生成一个无重复的列表

时间:2019-05-08 09:58:15

标签: sql ms-access

由于我对SQL和编码尚不陌生,所以希望有人能为我提供帮助,并且我无法解决以下问题。

我有一个包含

的表

患者姓名,处方日期,用药(包含多个用空格分隔的药物)。

在大多数情况下,每个人都会多排一行,因为人们会不时获得处方。

我想做的是生成所有曾经接受过药物A和药物B的患者的列表。

从逻辑上讲,我将识别所有曾经接受过药物A的患者以及所有曾经接受过药物B的患者。然后,我将选择出现在两组中的所有记录。然后,我想生成一个出现在两个组中的所有名称的列表, 如何在MS-Access SQL中执行此操作?

非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以使用group byhaving。假设没有重复项,您可以执行以下操作:

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;

答案 1 :(得分:0)

您需要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