2016-09-21 162 views
0

在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會給函數提供錯誤無效參數?

+0

如果你考慮'SELECT * FROM evo b',就很明顯'Nextvt'不在範圍內(如果你假定從左到右的屬性創建順序,那麼你錯了)。查看@Gordon Linoff的答案,他使用子查詢來創建一個額外的範圍級別,以便現在可以使用'SELECT Nextvt from e'。 – onedaywhen

回答

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; 
0

我認爲這個問題(或者說另外一個問題)是這樣的:

WHERE a.mth > b.mth and a.ctryname_nl = b.ctryname_nl

b是不是你的子查詢中定義。

子查詢本身就是一個有效的查詢。 ()中的任何內容都必須作爲獨立查詢來工作;這是解決子查詢問題的好方法。

相關問題