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

MS Access中筛选单一商品类型收据并实现数据聚合的SQL查询需求

MS Access 书店收据分类查询方案

一、查询仅含单一商品类型的收据(以仅书籍为例)

要筛选出只包含书籍的收据,核心是先确定每个收据对应的商品类型总数为1,且类型为书籍。由于MS Access不支持COUNT(DISTINCT),可以通过子查询先对每个收据的商品类型去重,再统计类型数量:

-- 获取仅含书籍的收据销售统计
SELECT t1.[RECEIPT ID], SUM(t1.[QUANTITY]) AS QNT, SUM(t1.[VALUE]) AS SALESV
FROM [TABLEA] t1
INNER JOIN (
    -- 子查询:筛选出只有一种商品类型的收据ID
    SELECT [RECEIPT ID]
    FROM (
        -- 对每个收据的商品类型去重
        SELECT DISTINCT [RECEIPT ID], PRODUCT
        FROM [TABLEA]
    ) AS t2
    GROUP BY [RECEIPT ID]
    HAVING COUNT(*) = 1
) AS t3 ON t1.[RECEIPT ID] = t3.[RECEIPT ID]
WHERE t1.PRODUCT = 'BOOK'
GROUP BY t1.[RECEIPT ID];

若要查询仅含非书籍商品的收据,只需将WHERE条件改为PRODUCT <> 'BOOK'即可。

二、查询包含两种商品类型的混合收据

要筛选同时包含书籍和非书籍的收据,同样通过子查询统计每个收据的商品类型数量为2,再关联原表计算总和:

1. 混合收据整体销售统计

SELECT t1.[RECEIPT ID], SUM(t1.[QUANTITY]) AS TOTAL_QNT, SUM(t1.[VALUE]) AS TOTAL_SALES
FROM [TABLEA] t1
INNER JOIN (
    SELECT [RECEIPT ID]
    FROM (
        SELECT DISTINCT [RECEIPT ID], PRODUCT
        FROM [TABLEA]
    ) AS t2
    GROUP BY [RECEIPT ID]
    HAVING COUNT(*) = 2
) AS t3 ON t1.[RECEIPT ID] = t3.[RECEIPT ID]
GROUP BY t1.[RECEIPT ID];

2. 混合收据分类型统计

如果需要分别统计混合收据中书籍和非书籍的数量与金额,可使用条件求和:

SELECT 
    [RECEIPT ID],
    SUM(IIF(PRODUCT = 'BOOK', [QUANTITY], 0)) AS BOOK_QNT,
    SUM(IIF(PRODUCT = 'BOOK', [VALUE], 0)) AS BOOK_SALES,
    SUM(IIF(PRODUCT <> 'BOOK', [QUANTITY], 0)) AS NON_BOOK_QNT,
    SUM(IIF(PRODUCT <> 'BOOK', [VALUE], 0)) AS NON_BOOK_SALES
FROM [TABLEA]
WHERE [RECEIPT ID] IN (
    SELECT [RECEIPT ID]
    FROM (
        SELECT DISTINCT [RECEIPT ID], PRODUCT
        FROM [TABLEA]
    ) AS t2
    GROUP BY [RECEIPT ID]
    HAVING COUNT(*) = 2
)
GROUP BY [RECEIPT ID];

原SQL问题说明

你之前的SQL仅筛选了商品为书籍的行,但混合类型收据(比如RD226)里的书籍行也会被纳入统计,导致结果包含混合收据的部分数据,无法区分纯书籍收据和混合收据。因此需要先通过子查询筛选出符合类型条件的收据ID,再关联原表统计对应数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 07:22:18