我有一个表,其中包含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 …),但是在解决此问题时遇到了很多麻烦。任何帮助将不胜感激。
您可以尝试使用子查询来进行计数,但是在性能方面,相关的子查询往往会受到影响。
如果您愿意在两个查询(而不是一个查询)中执行此操作,那么这些将起作用:
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上的不同查询中,以将结果全部集中在一个结果集中。