【问题标题】:How do you do a crosstab query in Access with a fixed amount of columns如何在 Access 中使用固定数量的列进行交叉表查询
【发布时间】:2010-10-30 13:59:33
【问题描述】:

我想使用 MS Access 交叉表查询提取数据,以便将其绑定到报表。加载页面时出现运行时错误“3637”:无法使用非固定列的交叉表作为子查询。

我想要一种在运行查询时恢复固定网格的方法,如果单元格为空,则显示零。

【问题讨论】:

  • 这是一个例子。根据过滤器中的日期,它会返回不同数量的列。 TRANSFORM Sum(tblCharting.Hours) AS SumOfHours SELECT tblCharting.DateofService FROM tblCharting RIGHT JOIN tlkpServiceLocations_SQL ON tblCharting.ServiceLocation = tlkpServiceLocations_SQL.ID WHERE (((tblCharting.DateofService) 在 #5/1/2009# 和 #5/5/2009# 之间)) 分组 tblCharting.DateofService, tblCharting.DateofService PIVOT tlkpServiceLocations_SQL.LocationName;我希望始终返回相同数量的列,即查找表中的行。

标签: sql ms-access crosstab


【解决方案1】:

子查询?这是我在 Access 方面的弱点之一,所以我无法帮助你。我建议发布查询的 SQL,以便其他人可以查看。运行查询时还会发生什么?

以下是我用来为给定单位提供过去十年成本的查询。 TRANSFORM Sum(ServiceRecords.srTotalCost) AS AnnualCost 选择 ServiceRecords.srEquipmentID 来自服务记录 GROUP BY ServiceRecords.srEquipmentID PIVOT "C" & DateDiff("yyyy",[srServiceDate],Date()) In ("C9","C8","C7","C6","C5","C4","C3"," C2","C1","C0");

诀窍是在 PIVOT 之后。由于我想要最近十年的数据,“C”和 DateDiff 部分设置了一个字符串变量,调用 C0 到 C9。 In 之后的部分告诉将内容放入哪一列。

另一个提取有关设备数据的查询调用此查询。我们通常使用的术语是堆叠查询。

如果这还不足以让您继续前进,请说明您尝试创建交叉表的数据类型。

Fellow Access MVP,Allen Browne 在这个主题上有一个很好的页面。 Crosstab query techniques

【讨论】:

  • 好的,我明白你在说什么。基本上我可以将 In ("x","y","z") 与所需的列名一起使用。没问题,但是有没有办法从查找表的行中自动生成这些?
  • 这是一个很棒的帖子。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2012-09-11
  • 2010-11-11
  • 2022-01-03
  • 2012-10-30
  • 2015-12-28
相关资源
最近更新 更多