PatientDX
Name Disease
Aa HIV
Aba DM
Bb HT
Bb DM
Aa HT
我希望获得同时患有HIV,DM或所有疾病或类似疾病的患者姓名。我想通过UI中的疾病复选框进行分析。我该怎么做?我的桌子设计不好吗?你能告诉我一个更好的方法吗?疾病名称可以多达100个。因此,我希望能够轻松找出患有特定疾病的患者,4或5等等。谢谢。
答案 0 :(得分:0)
尝试按用户分组,然后在查询中使用having子句。因此,要找到患有多种疾病的患者,您可以查询:
SELECT NAME
FROM PatientDX
GROUP BY NAME
HAVING COUNT(DISTINCT Disease) > 1
如果您想了解患有所有疾病的患者,那么您可以做以下事情:
SELECT NAME
FROM PatientDX
GROUP BY NAME
HAVING COUNT(DISTINCT Disease) = (SELECT COUNT(DISTINCT Disease)
FROM PatientDX)-- although you could maintain disease in another table.
答案 1 :(得分:0)
您的架构很好。
以下是如何查询患有所有3种特定疾病的患者的示例:
select Name
from PatientDX
where Disease in ('HIV', 'DM', 'HT')
group by Name
having count(distinct Disease) = 3
这里需要注意的一些重要事项:
distinct
子句中使用having
来确保如果只传递了'HIV'
3次(我假设您将使用参数化查询),我们就不会得到一个结果。count
(在本例中为3)必须与in
子句中的值数相匹配。IN
子句中的值列表在计算之前必须是唯一的。