【发布时间】: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% 确定它是否可行)。