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

MS Access中筛选多产品客户并汇总数据的SQL查询问题

解决MS Access中筛选同时拥有指定产品组合的客户并汇总数据的问题

原查询错误分析

你的查询返回空结果是因为两个关键逻辑错误:

  • 分组错误:GROUP BY同时包含了Client ID和Product ID,会按「客户+产品」的组合分组,无法得到客户级别的汇总结果。
  • 条件矛盾:HAVING子句中(Inventory.[Product ID]) = 20000 AND (Inventory.[Product ID]) = 20001不可能成立,单条记录的Product ID只能是一个值,无法同时等于两个不同的产品ID。

正确查询方案

以下两种方法均可实现需求,适配MS Access的语法:

方法1:使用子查询筛选符合条件的客户

SELECT 
    i.[Client ID],
    SUM(i.Quantity) AS Quantity,
    SUM(i.[Contract Value]) AS [Contract Value]
FROM 
    Inventory i
WHERE 
    -- 子查询筛选同时拥有Product A(20000)和Product B(20001)的客户
    i.[Client ID] IN (
        SELECT [Client ID]
        FROM Inventory
        WHERE [Product ID] IN (20000, 20001)
        GROUP BY [Client ID]
        HAVING COUNT(DISTINCT [Product ID]) = 2
    )
    -- 仅汇总指定产品的数据
    AND i.[Product ID] IN (20000, 20001)
GROUP BY 
    i.[Client ID];

方法2:使用EXISTS子句(适配不支持COUNT(DISTINCT)的旧版Access)

SELECT 
    i.[Client ID],
    SUM(i.Quantity) AS Quantity,
    SUM(i.[Contract Value]) AS [Contract Value]
FROM 
    Inventory i
WHERE 
    -- 验证客户拥有Product A
    EXISTS (
        SELECT 1
        FROM Inventory i1
        WHERE i1.[Client ID] = i.[Client ID] AND i1.[Product ID] = 20000
    )
    -- 验证客户拥有Product B
    AND EXISTS (
        SELECT 1
        FROM Inventory i2
        WHERE i2.[Client ID] = i.[Client ID] AND i2.[Product ID] = 20001
    )
    -- 仅汇总指定产品的数据
    AND i.[Product ID] IN (20000, 20001)
GROUP BY 
    i.[Client ID];

结果说明

两种方法都会返回你预期的结果:

Client IDQuantityContract Value
10001120,150
101071140,150

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:13:40