VB MS Access 97有计数(明显)错误

时间:2016-01-04 14:23:34

标签: sql ms-access

SELECT patient.id
     , patient.name
FROM patient,patientdx
WHERE patient.id = patientdx.id
      AND disease IN ('HIV', 'DM')
GROUP BY id HAVING COUNT(DISTINCT disease) = 2;

问题是COUNT(DISTINCT ),97版本不支持。是否有其他查询来获得相同的结果?

2 个答案:

答案 0 :(得分:0)

我认为这可能适合你。

...
HAVING
    MAX(disease) = 'HIV' AND MIN(disease) = 'DM'
AND MAX(IIF(disease > 'DM' AND disease < 'HIV', 1, 0)) = 0

翻译:按字母顺序排列的最大disease是艾滋病毒,最低的是DM。另一个表达式确保它们之间没有任何内容。

编辑:我没有注意到你已经将disease条款WHERE限制为两个有趣的人。因此,我可以看到您使用HAVING的目的是确保患者同时具有这两种诊断。这使得最后一个条件在您的情况下是多余的,但将来可能是一个方便的技巧。重申,我认为这个更简单的条件对你来说已经足够了。

HAVING MAX(disease) = 'HIV' AND MIN(disease) = 'DM'

你当然可以尝试第一个,让我们/我知道Access 97是否可以处理它。

答案 1 :(得分:0)

您应该学会使用正确的join语法。但是,您可以使用IN

执行所需操作而无需聚合
SELECT patient.*
FROM patient
WHERE patient.id IN (SELECT id FROM patientdx WHERE disease = 'HIV') AND
      patient.id IN (SELECT id FROM patientdx WHERE disease = 'DM');

虽然有多种方法可以使聚合查询起作用,但这提供了聚合查询的替代方法。