2017-09-24 24 views
2

我有以下作为保存的查询“qGetClubPoints”派生从保存的查询变换的查询不能识别字段MS-ACCESS

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当查询被用作枢轴表源不被认可。

+1

我可以在Access 2016下复制此行为(可能是优化器的行为,以前有问题)。然而,从用户自定义函数中包装'WHERE'查询来看,我想不出一个解决方法。如果你对如何做到这一点感兴趣,我可以向你展示。 –

+0

我正在通过ASP.NET网站运行查询,我不确定我能在这里使用用户定义的函数 –

+0

不,不幸的是,您不会。另一种方法是将你的'IN'子句移动到'FROM'子句并将其加入,并将'IN'子句中的'WHERE'子句移动到'ON'子句。 (你可能必须去嵌套子查询才能使用'TOP',并且我不能100%确定它是可能的)。 –

回答

0

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

丑但可能工作

+0

不幸的是,这正是我最终做的。由于值不会经常更改(每月一次/两次),因此无论何时重新计算,它都会将查询的最终结果推送到表中作为交叉表的源。无赖! –

+0

使用便笺式临时表并不是世界上最糟糕的事......在一些棘手的设计中,比如你的 - 它往往是唯一的方法。一个很好的事情是在临时表中的数据的可见性可以帮助成为一个测试点,看到结果中间流...... –