MS Access:对多个表的交叉表查询(多对多关系)

Posted

技术标签:

【中文标题】MS Access:对多个表的交叉表查询(多对多关系)【英文标题】:MS Access: Crosstab query on multiple tables (many-to-many relation) 【发布时间】:2018-08-23 11:35:02 【问题描述】:

我正在使用 MS Access 数据库。

我有三张桌子:

客户(idCustomer、CustomerName):

1   C1
2   C2
3   C3
4   C4
5   C5

产品(idProduct、ProductName):

1   P1
2   P2
3   P3
4   P4

订单(id、idCustomer、idProduct、数量):

1   2   1   10
2   2   2   15
3   4   2   13
4   5   4   19

我正在做一个查询以获得这个结果:

行 = 客户(所有客户) 列 = 产品(所有产品) 细胞 = 数量

像这样:

        P1      P2      P3      P4
C1      0       0       0       0
C2      10      15      0       0
C3      0       0       0       0
C4      0       13      0       0
C5      0       0       0       19

谁能帮忙完成这个查询任务?

【问题讨论】:

你尝试了什么?问题出在哪里? 找到交叉表查询向导了吗? 当我使用交叉表功能 (TRANSFORM PIVOT) 时,我无法获取所有列和所有行。我需要获取我的表客户和产品的所有记录,即使是订单中没有记录的记录。 Ms Access 的栏目限制为 255 列,如果您有更多产品使用 Excel。 【参考方案1】:

诀窍是:

    首先构建一个常规 SELECT 查询,连接 3 个表,返回您想要的列(CustomerName、ProductName、Quantity)

    然后在这个基本查询上运行交叉表查询向导,这将是不言自明的。

我需要获取我的表客户和产品的所有记录,即使是订单中没有记录的表。

那么对于 1. 中的基本查询,您需要一个 Full Outer Join 。

【讨论】:

您有带有示例的 URL 吗?我需要获取我的表客户和产品的所有记录,即使是订单中没有记录的记录。【参考方案2】:

选择 idcustomer,[1] as p1,[2] as p2,[3] as p3,[4] as p4 从 ( 从订单中选择 idcustomer、idproduct、数量)ps 枢 (总和(数量) 对于 ([1],[2],[3],[4]) 中的 idproduct ) 光伏; 我仍然无法弄清楚如何将 idcustomer 更改为 customername 但这会帮助你(我确定!!)。

【讨论】:

以上是关于MS Access:对多个表的交叉表查询(多对多关系)的主要内容,如果未能解决你的问题,请参考以下文章

推进:没有交叉表的多对多关系

MS Access 多对多关系

Redbean php对同一个表的多个多对多关系

hibernate关联关系(多对多)

通过链接到SQL Server数据库的MS Access以多对多关系插入数据(中间表)

mybatis11--多对多关联查询