You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS Access多查询合并:按年月统计筛选结果分列显示求助

按年月多维度统计患者入组数据的SQL解决方案

正确的查询代码

SELECT 
    Year([dtmApproach]) AS [Year],
    Month([dtmApproach]) AS [Month],
    COUNT(IIF(tblScreening.intCode IN (1,2), tblScreening.intMMID, NULL)) AS [# Consented],
    COUNT(IIF(tblScreening.intCode IN (1,2) AND tblScreening.intPayer = 2, tblScreening.intMMID, NULL)) AS [# Medicare],
    COUNT(IIF(tblScreening.intCode IN (1,2) AND tblScreening.strHospital IN ('目标医院1', '目标医院2'), tblScreening.intMMID, NULL)) AS [# From Select Hospitals]
FROM tblScreening
GROUP BY Year([dtmApproach]), Month([dtmApproach])
ORDER BY Year([dtmApproach]), Month([dtmApproach]);

问题分析与说明

  1. 为什么UNION不适用
    UNION的作用是将多个查询的结果按行合并,而你的需求是在同一行展示年月对应的三个统计值,这种场景下用UNION完全错误,反而会把不同统计维度的数据拆成多行,不符合目标输出格式。

  2. 原查询报错的原因
    你第一个SELECT语句缺少GROUP BY Year([dtmApproach]), Month([dtmApproach])子句。Access SQL规定:当SELECT语句中同时包含聚合函数(如COUNT)和非聚合字段(如Year([dtmApproach]))时,所有非聚合字段必须出现在GROUP BY中,否则会抛出你遇到的错误。

  3. 条件聚合的逻辑
    这里用IIF函数配合COUNT实现条件统计:

    • # Consented:筛选intCode为1或2的同意入组患者,符合条件时返回患者ID,否则返回NULL,COUNT会自动忽略NULL值,得到对应年月的同意入组总数。
    • # Medicare:在同意入组的基础上,额外添加intPayer=2的筛选条件,统计同时满足两个条件的患者数。
    • # From Select Hospitals:将('目标医院1', '目标医院2')替换为你需要统计的特定医院名称,筛选同意入组且来自这些医院的患者数。

内容的提问来源于stack exchange,提问作者Mushroom495

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:25:15