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

Ms access Microsoft Access交叉表查询中显示的多个客户ID的计数,ms-access,crosstab,Ms Access,Crosstab,我正在尝试在MicrosoftAccess中构建一个交叉表查询,它执行以下操作 开始数据 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 1

我正在尝试在MicrosoftAccess中构建一个交叉表查询,它执行以下操作

开始数据

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中的所有客户的计数)


如果您有任何帮助,我们将不胜感激。

这需要CustomerID列上的自联接。这个问题没有明确地命名源代码,所以我称它为
CS
。自联接与其他联接没有区别,只是需要别名,以便可以分别引用同一源的不同实例。这里的别名是
CS1
CS2

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语句中定义所有必要的联接,作为交叉表查询的一部分,但在不进行转换的情况下单独查看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;
研究该查询的结果——并了解自连接——有望有助于将来构建类似的查询