子查询给出错误函数的无效参数

时间:2016-09-21 10:37:21

标签: sql ms-access subquery time-series

在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会为函数提供错误的无效参数?

2 个答案:

答案 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未在子查询中定义。

子查询本身具有有效查询。 ()中的任何内容必须作为独立查询工作;这是对子查询进行故障排除的好方法。