一尘不染

Access 2007:“电子计数(区分)”。

sql

我有一个表,其中包含StudyId,PatientId和StudyStartDateTime。我想绘制用户指定的两个日期之间的研究和患者总数。问题在于计数不同的值。这是查询:

SELECT
    s.StudyStartDateTime,
    COUNT(s.StudyId),
    COUNT(s.PatientId)
FROM
    dbo_Study_ViewX211_Rpt AS s
WHERE
    s.StudyStartDateTime>=Forms![StudiesPatientsByDate]!txtStartDate,
    s.StudyStartDateTime<=Forms![StudiesPatientsByDate]!txtEndDate
GROUP BY s.StudyStartDateTime
ORDER BY s.StudyStartDateTime;

此查询几乎可以正常工作,除了它会计算具有相同StudyId或相同PatientId的行的重复项。我知道Access不支持COUNT(DISTINCT
…),但是在解决此问题时遇到了很多麻烦。任何帮助将不胜感激。


阅读 192

收藏
2021-03-17

共1个答案

一尘不染

您可以尝试使用子查询来进行计数,但是在性能方面,相关的子查询往往会受到影响。

如果您愿意在两个查询(而不是一个查询)中执行此操作,那么这些将起作用:

SELECT
    s.StudyStartDateTime,
    COUNT(s.PatientId)
FROM
    dbo_Study_ViewX211_Rpt AS s
WHERE
    s.StudyStartDateTime>=Forms![StudiesPatientsByDate]!txtStartDate,
    s.StudyStartDateTime<=Forms![StudiesPatientsByDate]!txtEndDate
GROUP BY s.StudyStartDateTime, s.PatientId
ORDER BY s.StudyStartDateTime;


SELECT
    s.StudyStartDateTime,
    COUNT(s.StudyId),
FROM
    dbo_Study_ViewX211_Rpt AS s
WHERE
    s.StudyStartDateTime>=Forms![StudiesPatientsByDate]!txtStartDate,
    s.StudyStartDateTime<=Forms![StudiesPatientsByDate]!txtEndDate
GROUP BY s.StudyStartDateTime, s.StudyId
ORDER BY s.StudyStartDateTime;

请注意,我将计数的字段添加到每个字段的GROUP BY表达式中。

如果您想使其更“紧凑”,则可以为每个查询创建一个视图,并将它们加入到StudyStartDateTime上的不同查询中,以将结果全部集中在一个结果集中。

2021-03-17