Microsoft Access 交叉表查询中显示的多个客户 ID 的计数

Posted

技术标签:

【中文标题】Microsoft Access 交叉表查询中显示的多个客户 ID 的计数【英文标题】:Count of multiple customer ID shown in a Microsoft Access crosstab query 【发布时间】:2017-09-04 17:56:59 【问题描述】:

我正在尝试在 Microsoft Access 中构建执行以下操作的交叉表查询

开始数据

Segment  |   Customer ID

10       |    5

12       |    5

11       |    5

11       |    7

10       |    10

12       |    10

输出

      10  |  11  |   12

10     2  |  1   |  2

11     1  |  2   |  1

12     2  |  1   |  2

基本上,只要两个单独的段的 customerID 相同,我就会尝试按段显示计数。例如,customerID 5 在段 10 和 12 之间共享,客户 ID 10 在段 10 和 12 之间共享,因此在 10 和 12 交叉点的表上显示 2(同时在段 10 和12).

您的任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

这需要在 CustomerID 列上进行自联接。这个问题没有明确指出来源,所以我称之为CS。自联接与其他联接没有什么不同,只是别名是必需的,以便可以分别引用同一源的不同实例。这里的别名是CS1CS2

TRANSFORM Count(CS1.CustomerID) AS CountOfCustomerID
SELECT CS1.Segment
FROM CS AS CS1 INNER JOIN CS AS CS2 ON CS1.CustomerID = CS2.CustomerID
GROUP BY CS1.Segment
ORDER BY CS1.Segment, CS2.Segment
PIVOT CS2.Segment;

虽然在这种情况下,可以在单个 select 语句中定义所有必要的连接作为 CrossTab 查询的一部分,但在不进行转换的情况下单独查看 Select 结果通常会很有启发性。换句话说,我建议检查

SELECT CS1.Segment AS Segment1, CS2.Segment AS Segment2, CS1.CustomerID AS CustomerID
FROM CS AS CS1 INNER JOIN CS AS CS2 ON CS1.CustomerID = CS2.CustomerID
ORDER BY CS1.Segment, CS2.Segment, CS1.CustomerID;

研究该查询的结果 - 并了解自联接 - 希望有助于将来制作类似的查询。

【讨论】:

以上是关于Microsoft Access 交叉表查询中显示的多个客户 ID 的计数的主要内容,如果未能解决你的问题,请参考以下文章

Access 2016:在反向交叉表查询中删除重复代码

基于包含子查询的查询的 ms-access 交叉表查询

数据表视图中的 MS Access 表单交叉表查询

Microsoft Access 2016 查询为链接表中的空日期返回 1/1/1800

Microsoft Access 2010 中的自定义查询

SQLServer中的交叉查询