在MS Access中,每个国家/地区每个月都有 vt 表格 evo :
EVO:
country,mth,vt
阿富汗,1,20
阿富汗,2月25日
阿富汗,3,15
乌克兰,1,10
乌克兰,2,40
乌克兰,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会为函数提供错误的无效参数?
答案 0 :(得分:3)
不允许在同一个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;
答案 1 :(得分:0)
我认为问题(或更确切地说是另一个问题)是:
WHERE a.mth > b.mth and a.ctryname_nl = b.ctryname_nl
b
未在子查询中定义。
子查询本身具有有效查询。 ()中的任何内容必须作为独立查询工作;这是对子查询进行故障排除的好方法。