【问题标题】:MS Access Crosstab query with multiple columns?具有多列的 MS Access 交叉表查询?
【发布时间】:2015-12-28 23:27:53
【问题描述】:

在交叉表查询中获取多列的最佳方法是什么?我有下表:

ID  Name    Topic   Date
123 John    Define  9/30/2015
123 John    Measure 10/30/2015
123 John    Analyze 11/30/2015
321 Mary    Measure 8/28/2015
321 Mary    Define  7/15/2015
321 Mary    Define  6/15/2015

这是我正在寻找的结果:

ID  Name    Define  Define Date Measure Measure Date    Analyze Analyze Date
123 John       1      9/30/2015   1     10/30/2015        1     11/30/2015
321 Mary       2      7/15/2015   1     8/28/2015       

我创建了一个交叉表查询来旋转主题并按列计数,但我还没有弄清楚如何为计数旁边的日期添加另一列。

我可以有多个不同日期的主题,但我会使用 Max 来获取最新日期。谢谢!

【问题讨论】:

    标签: ms-access ms-access-2010


    【解决方案1】:

    只需在 GROUP BY 查询中运行条件聚合即可转置数据。此处的交叉表不会有帮助,因为您不想将行值转换为列。相反,您想根据行值定义列。

    SELECT [ID], [Name], 
           Count(IIF(Topic='Define', Topic, Null)) As [Define], 
           Max(IIF(Topic='Define', [Date], Null)) As [Define Date], 
           Count(IIF(Topic='Measure', Topic, Null)) As [Measure],
           Max(IIF(Topic='Measure', [Date], Null)) As [Measure Date], 
           Count(IIF(Topic='Analyze', Topic, Null)) As [Analyze],
           Max(IIF(Topic='Analyze', [Date], Null)) As [Analyze Date]
    FROM TableName
    GROUP BY [ID], [Name];
    

    【讨论】:

    • 这是在模拟 CROSSTAB,实际上可以通过 2 个 CROSSTAB 查询来完成,然后在 SELECT 查询中加入这些查询。如果您说 20 个主题,那可能会更好。然后另一种方法将使用 UNION 查询和基于 UNION 的 CROSSTAB。给猫剥皮的方法不止一种!
    猜你喜欢
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多