子查询提供了错误的参数无效运作
问题描述:
在MS Access我有表EVO可变VT每人每月国家:子查询提供了错误的参数无效运作
EVO:
国家,月,VT
阿富汗, 1,20
阿富汗2,2 25
阿富汗3,15
乌克兰1,10
乌克兰2,440
乌克兰3,50
我试着计算变量vt的月变化。每个国家。
SELECT b.ctryname_nl, b.mth, b.vt,
(SELECT Top 1 a.vt
FROM evo a
WHERE a.mth > b.mth and a.ctryname_nl = b.ctryname_nl
ORDER BY a.ctryname_nl, a.mth) AS Nextvt,
Nextvt-vt AS change
FROM evo b
为什么Access会给函数提供错误无效参数?
答
您不允许在同一个SELECT
的表达式中使用列别名。
只需使用一个子查询:
SELECT e.*, (Nextvt - vt) AS change
FROM (SELECT b.ctryname_nl, b.mth, b.vt,
(SELECT Top 1 a.vt
FROM evo as a
WHERE a.mth > b.mth and a.ctryname_nl = b.ctryname_nl
ORDER BY a.ctryname_nl, a.mth
) AS Nextvt
FROM evo as b
) e;
答
我认为这个问题(或者说另外一个问题)是这样的:
WHERE a.mth > b.mth and a.ctryname_nl = b.ctryname_nl
b
是不是你的子查询中定义。
子查询本身就是一个有效的查询。 ()中的任何内容都必须作为独立查询来工作;这是解决子查询问题的好方法。
如果你考虑'SELECT * FROM evo b',就很明显'Nextvt'不在范围内(如果你假定从左到右的属性创建顺序,那么你错了)。查看@Gordon Linoff的答案,他使用子查询来创建一个额外的范围级别,以便现在可以使用'SELECT Nextvt from e'。 – onedaywhen