计算MS Access中按名称分组的唯一值

时间:2014-06-25 20:43:19

标签: sql ms-access ms-access-2010 ms-access-2013

tech on the net练习#3的答案正是我所需要的。但是根据我自己的经验和Jensen's answer to a similar question,我发现它不起作用。

我的数据如下:

my_table:
: Customer : Contract : Product : Date    :
: John     : 123      : Plate   : 12/5/13 :
: John     : 123      : Spork   : 12/5/13 :
: Jane     : 567      : Bowl    : 9/9/13  :
: Jane     : 789      : Plate   : 9/9/13  :
: Jane     : 789      : Spork   : 9/9/13  :
: Bob      : 234      : Plate   : 8/7/13  :
: John     : 345      : Plate   : 4/9/13  :
: John     : 345      : Sponge  : 4/9/13  :

我想要的是获得每位客户的独特合约数量。

my_query
: Customer : Number of Contracts :
: Jane     : 2                   :
: John     : 2                   :
: Bob      : 1                   :

如果我只想要从2013年6月到2014年6月(过去的一年)的合同,那么我会得到:

my_query
: Customer : Number of Contracts :
: Jane     : 2                   :
: Bob      : 1                   :
: John     : 1                   :

提前致谢!

1 个答案:

答案 0 :(得分:1)

您需要使用子查询来获取不同的客户/合同组合,然后您可以在子查询上执行分组以获取计数。

SELECT Customer, COUNT(*) AS contract_count
FROM
    (SELECT DISTINCT Customer, Contract
    FROM my_table) contract_data
GROUP BY Customer

如果要进行日期过滤,可以在子查询中进行过滤。

SELECT Customer, COUNT(*) AS contract_count
FROM
    (SELECT DISTINCT Customer, Contract
    FROM my_table
    WHERE [Date] BETWEEN #6/1/2013# AND #6/1/2014#) contract_data
GROUP BY Customer