由于我对SQL和编码尚不陌生,所以希望有人能为我提供帮助,并且我无法解决以下问题。
我有一个包含
的表患者姓名,处方日期,用药(包含多个用空格分隔的药物)。
在大多数情况下,每个人都会多排一行,因为人们会不时获得处方。
我想做的是生成所有曾经接受过药物A和药物B的患者的列表。
从逻辑上讲,我将识别所有曾经接受过药物A的患者以及所有曾经接受过药物B的患者。然后,我将选择出现在两组中的所有记录。然后,我想生成一个出现在两个组中的所有名称的列表, 如何在MS-Access SQL中执行此操作?
非常感谢!
答案 0 :(得分:0)
您可以使用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;
答案 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