【问题标题】:Transform dates from table into columns in MS Access query将日期从表转换为 MS Access 查询中的列
【发布时间】:2021-06-20 16:44:28
【问题描述】:

我有一张如下表:

type_id date order
20 2021-06-23 123
20 2021-06-23 217
35 2021-06-23 121
35 2021-06-24 128
20 2021-06-24 55
35 2021-06-25 77
20 2021-06-26 72
20 2021-06-26 71

并且只想在 type_id=20 像这样的情况下创建查询

2021-06-23 2021-06-24 2021-06-25 2021-06-25
123 55 72
217 71
  • 是否可以在没有 vba 的情况下使用 sql 执行此操作?
  • 如果需要 vba,我是否需要创建一个额外的表并每次添加/删除一个新列?

感谢您的任何想法

【问题讨论】:

标签: sql vba ms-access


【解决方案1】:

您可以使用条件聚合。但这在 MS Access 中很痛苦,因为您需要一个顺序值。你可以计算一个:

select max(iif(date = "2021-06-23", order, null)) as val_2021_06_23,
       max(iif(date = "2021-06-24", order, null)) as val_2021_06_24,
       max(iif(date = "2021-06-25", order, null)) as val_2021_06_25,
       max(iif(date = "2021-06-26", order, null)) as val_2021_06_26       
from (select t.*,
             (select count(*)
              from t as t2
              where t2.type_id = t.type_id and t2.date = t.date and t2.order <= t.order
             ) as seqnum
      from t
      where type_id = 20
     ) t
group by seqnum;

【讨论】:

    【解决方案2】:

    谢谢你,它有效! (只需要修改一处代码“2021-06-23”---->#2021-06-23#

    与此同时,我找到了其他解决方案,但这需要在表中添加一个新字段。该字段是一个数字字段,其中包含从 1 到 n 的每一天的序列号。在我的项目中,它甚至很有帮助,因为在这种情况下,我可以按列控制顺序

    这里是代码。将来可能对某人有帮助

    TRANSFORM
    First ([tabela1].[order])
    SELECT  [tabela1].[sequence]
    FROM  [tabela1]
    WHERE [tabela1].[type_id] = 20
    GROUP BY [tabela1].[sequence]
    PIVOT  [tabela1].[date]
    

    【讨论】:

      猜你喜欢
      • 2013-06-26
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多