Access数据库查询需求:获取指定患者的检验项目及检测次数
正确的SQL查询方案(针对Access数据库)
完整SQL(包含示例中的描述文本)
SELECT tLabTestNames.fTestName, COUNT(tLabResults.fLabTestID) AS TestCount, 'he had ' & COUNT(tLabResults.fLabTestID) & ' ' & LCASE(tLabTestNames.fTestName) & IIf(COUNT(tLabResults.fLabTestID) > 1, ' tests', ' test') AS TestDescription FROM tLabResults INNER JOIN tLabTestNames ON tLabResults.fLabTestID = tLabTestNames.ID WHERE tLabResults.fPatientID = 1 GROUP BY tLabTestNames.fTestName ORDER BY tLabTestNames.fTestName ASC;
简化版(仅获取项目名称和检测次数)
SELECT tLabTestNames.fTestName, COUNT(tLabResults.fLabTestID) AS TestCount FROM tLabResults INNER JOIN tLabTestNames ON tLabResults.fLabTestID = tLabTestNames.ID WHERE tLabResults.fPatientID = 1 GROUP BY tLabTestNames.fTestName ORDER BY tLabTestNames.fTestName ASC;
你的原查询报错原因说明
- 缺少表关联条件:直接用逗号连接两张表会产生笛卡尔积(数据混乱),必须通过
INNER JOIN指定tLabResults.fLabTestID = tLabTestNames.ID的关联关系。 - GROUP BY不符合Access规则:Access要求所有
SELECT中的非聚合字段必须出现在GROUP BY中,你原查询只分组了错误的字段(fLabTest是笔误,实际应为fLabTestID),但未包含fTestName,导致报错。 - 字段名笔误:你写的
Count(tLabResults.fLabTest)和WHERE tlabresults.fpatient = 1都是无效字段,正确字段应为fLabTestID和fPatientID。
内容的提问来源于stack exchange,提问作者Alan
相关产品推荐
相关产品推荐

