1

我有两个共享一对多关系的 MS Access 表。它们的结构如下:

tbl_Persons

+----------+------------+-----------+
| PersonID | PersonName | OtherData |
+----------+------------+-----------+
|    1     |  PersonA   |    etc.   |
|    2     |  PersonB   |           |
|    3     |  PersonC   |           |

tbl_Visits

+----------+------------+------------+-----------------------
| VisitID  |  PersonID  |  VisitDate | dozens of other fields
+----------+------------+------------+-----------
|    1     |     1      |  09/01/13  |
|    2     |     1      |  09/02/13  |
|    3     |     2      |  09/03/13  |
|    4     |     2      |  09/04/13  |  etc...

我希望基于该VisitDate字段创建一个新表,其列标题是 Visit -n其中n是访问次数的 1、Visit -n- Data1、Visit -n- Data2、Visit - n - Data3 等。

合并表

+----------+----------+---------------+-----------------+----------+----------------+
| PersonID |  Visit1  |  Visit1Data1  |  Visit1Data2... |  Visit2  | Visit2Data1... |
+----------+----------+---------------+-----------
|    1     | 09/01/13 |               |                 | 09/02/13 |
|    2     | 09/03/13 |               |                 | 09/04/13 |   
|    3     |  etc.    |               |

我真的不知道该怎么做。无论是 SQL 查询还是使用 DAO,然后循环遍历记录和列。至关重要的是,PersonID每行只有 1 个,并且他的所有数据都按时间顺序出现在列中。

4

1 回答 1

0

首先用类似的东西对访问进行排名

SELECT PersonID, VisitID, 
(SELECT COUNT(VisitID) FROM tbl_Visits AS C 
WHERE C.PersonID = tbl_Visits.PersonID 
AND C.VisitDate < tbl_Visits.VisitDate) AS RankNumber 
FROM tbl_Visits

将此查询用作“枢轴”的基础

由于您似乎在同一天(访问 1 和 2)有一些人访问,因此 WHERE 子句需要更复杂一些。但我希望你了解基本概念。

可以使用多个 LEFT JOIN 完成旋转。我质疑我的解决方案是否会具有高性能,因为我没有对其进行测试。在 SQL Server 中比在 MS Access 中更容易完成。

于 2013-09-06T21:25:29.737 回答