【问题标题】:Create a pivot table from two tables based on dates根据日期从两个表创建数据透视表
【发布时间】:2013-09-05 02:07:03
【问题描述】:

我有两个共享一对多关系的 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字段创建一个新表,其列标题是访问-n,其中n是访问次数的1 、访问-n-Data1、访问-n-Data2、访问-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,然后循环遍历记录和列。至关重要的是,每行只有 1 个PersonID,并且他的所有数据都按时间顺序出现在列中。

【问题讨论】:

    标签: sql vba ms-access dao


    【解决方案1】:

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

    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 中更容易完成。

    【讨论】:

    • 谢谢你,@Wie​​tze314。我真的不太了解 SQL(我会努力学习它)。我已经使用 VBA 解决了这个问题。代码出现在我发表的另一篇文章中。 stackoverflow.com/questions/18651668/…
    猜你喜欢
    • 2015-11-16
    • 2012-04-16
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多