【问题标题】:Count distinct items between start date and end date in MS Access在 MS Access 中计算开始日期和结束日期之间的不同项目
【发布时间】:2014-12-22 11:11:21
【问题描述】:

我有这两张表:

表 1

| EventCode | StartDate |  EndDate  | Client |
|   13400   | 1/12/2014 | 5/12/2014 |   ABC  |
|   13400   | 6/12/2014 | 8/12/2014 |   ABC  |
|   15600   | 3/12/2014 | 5/12/2014 |   ABC  |

表 2

| EventCode | Client | SignUpDate | Agent |
|   13400   |   ABC  |  2/12/2014 | AG001 |
|   13400   |   ABC  |  2/12/2014 | AG001 |
|   13400   |   ABC  |  3/12/2014 | AG002 |
|   15600   |   ABC  |  4/12/2014 | AG002 |
|   15600   |   ABC  |  4/12/2014 | AG004 |
|   15600   |   ABC  |  5/12/2014 | AG002 |
|   13400   |   ABC  |  7/12/2014 | AG003 |

我需要加入两个表 WHERE Table2.SignUpDate BETWEEN Table1.StartDate AND Table1.EndDate,然后我需要表 2 中 distinct 的 Agent 计数,以获取每个事件有多少不同的人进行了销售,如下所示:

| EventCode | StartDate |  EndDate  | Client |  CountOfDistinctAgents |
|   13400   | 1/12/2014 | 5/12/2014 |   ABC  |           2            | //(AG001, AG002)
|   13400   | 6/12/2014 | 8/12/2014 |   ABC  |           1            | //(AG003)
|   15600   | 3/12/2014 | 5/12/2014 |   ABC  |           2            | //(AG002, AG004)

但我无法获得上述输出,因为我需要在 MS ACCESS 2003 中执行此操作。 请帮我。

这是我的旧代码,但不包括 DISTINCT 代理。

SELECT tmp.[Event Code], eb.CampaignLN, eb.StartDate, eb.EndDate, COUNT(*) AS HeadCount
FROM 
(SELECT DISTINCT [Event Code], Campaign, [Signup Date], [Agent Id] FROM [Main Table2]) AS tmp 
INNER JOIN qryGetEventBookings AS eb ON (tmp.[Signup Date] BETWEEN CDATE(eb.StartDate) AND  
CDATE(eb.EndDate)) AND (eb.CampaignLN=tmp.Campaign) AND (eb.LocationCode=tmp.[Event Code])
GROUP BY tmp.[Event Code], eb.CampaignLN, eb.StartDate, eb.EndDate;

非常感谢您的所有帮助。提前致谢。

【问题讨论】:

  • “COUNT(DISTINCT [Agent Id])”是否在 MS Access 中工作?在 SQL Server 中这将是解决方案,但我不知道所有访问限制。
  • 很遗憾,Access 不支持该 Count(Distinct *)。 :(

标签: sql ms-access-2003


【解决方案1】:

要计算不同的代理,您需要使用子查询(因为 MS Access 不支持count(distinct))。结果是这样的:

SELECT [Event Code], COUNT(*) AS NumAgents
FROM (SELECT DISTINCT m.EventCode, eb.Agent
      FROM  [Main Table2] as m JOIN
            qryGetEventBookings eb
            ON eb.CampaignLN = m.Campaign AND eb.LocationCode = m.[Event Code] AND
               eb.SignUpDate BETWEEN m.StartDate AND m.EndDate
     ) AS tmp 
GROUP BY [Event Code];

【讨论】:

  • 我设法使用了这个概念,但它缺少我正在寻找的细节,而我最终发现了这些细节。但是,嘿,非常感谢!真的很大的帮助。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多