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:对多个表的交叉表查询(多对多关系)的主要内容,如果未能解决你的问题,请参考以下文章