【问题标题】:MS-ACCESS Derived transform query from saved query does not recognize fieldsMS-ACCESS 来自已保存查询的派生转换查询无法识别字段
【发布时间】:2018-03-05 10:23:41
【问题描述】:

我保存了以下查询“qGetClubPoints”

SELECT t1.[season], t1.evIndex, t1.Category, t1.runner, 
   t1.runnerName, t1.ClubID, t1.ClubPoints, t2.CategoryGroupID 
FROM 
    League AS t1 INNER JOIN 
    [Categories] AS t2 
    ON t1.category = t2.category 
WHERE  
    t1.[season]>=2017 
AND 
    t1.[runner] IN 
    (
      SELECT TOP 4 runner FROM [league] as t11 
           INNER JOIN [Categories] as t12 
           ON t11.category = t12.category 
         WHERE t11.evIndex=t1.evIndex 
             AND t11.clubID=t1.ClubID 
             AND t12.CategoryGroupID=t2.CategoryGroupID 
         ORDER BY ClubPoints DESC, runner DESC
    ) 
ORDER BY t1.evIndex, t1.ClubID, t2.CategoryGroupID, t1.ClubPoints DESC

上述查询根据每个类别组每个事件的前 4 个结果生成每个俱乐部的积分。当我运行上述查询时,我得到了预期的结果。 现在我想从上面的结果中执行一个数据透视表

TRANSFORM sum(ClubPoints) SELECT ClubID FROM qGetClubPoints GROUP BY ClubID PIVOT evIndex

但是,我收到以下错误:

Microsoft Access 数据库引擎无法将“t1.evIndex”识别为有效的字段名称或表达式

当查询用作数据透视表的源时,查询中的内部参数(例如 t11.evIndex=t1.evIndex)似乎无法识别。

【问题讨论】:

  • 我可以在 Access 2016 下复制此行为(可能是优化器出现问题,之前遇到过问题)。但是,除了将 WHERE 查询包装在用户定义的函数中之外,我想不出解决办法。如果你对如何做到这一点感兴趣,我可以告诉你。
  • 我正在通过 ASP.NET 站点运行查询,我不确定是否可以在此处使用用户定义的函数
  • 不,很遗憾,你不会。另一种方法是将IN 子句移动到FROM 子句并将其加入,并将WHERE 子句从IN 子句移动到ON 子句。 (您可能必须使用嵌套子查询才能使用TOP,我不能 100% 确定它是否可行)。

标签: sql ms-access pivot


【解决方案1】:

尝试将“qGetClubPoints”记录集写入表格;然后将您的数据透视查询应用于此表。

丑陋但可能有用

【讨论】:

  • 不幸的是,这正是我最终所做的。由于这些值不会经常更改(每月一次/两次),因此无论何时重新计算,它都会将查询的最终结果推送到一个表中,作为交叉表的源。无赖!!!
  • 好吧,使用便签本临时表并不是世界上最糟糕的事情......在一些棘手的设计中,比如你的 - 它通常是唯一的方法。一件好事是您的数据在该临时表中的可见性可以帮助成为在流中查看结果的测试点....
猜你喜欢
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多