2013-07-19 67 views
1

我想在查詢中加入具有函數的別名字段。這在MS Access中可能嗎?訪問:查詢加入別名字段

SELECT Mid([StockNum],1,9) AS StockTrim 
FROM POs LEFT JOIN [STOCK DICTIONARY] 
    ON POs.[StockTrim] = [STOCK DICTIONARY].[Stock] 
GROUP BY Mid([StockNum],1,9), [STOCK DICTIONARY].Stock 
HAVING ((([STOCK DICTIONARY].Stock) Is Null)); 

在這個例子中,我試圖加入的計算字段StrockTrim,但訪問帶來了對POs.StockTrim

回答

3

有時你可以使用別名「輸入參數值」輸入框中在查詢中,有時不會。在你的情況,下面應該工作(我也清理了您的GROUP BY/HAVING場更合適的WHERE子句):

SELECT Mid([StockNum],1,9) AS StockTrim 
FROM POs LEFT JOIN [STOCK DICTIONARY] 
    ON Mid(POs.[StockNum],1,9) = [STOCK DICTIONARY].[Stock] 
WHERE [STOCK DICTIONARY].Stock Is Null 
GROUP BY Mid([StockNum],1,9) 

瞭解時,你可以在Access查詢中使用別名,當你不能是一種黑暗的藝術。一般而言,如果在查詢計劃中稍後出現,則可能會使用別名。例如,你可以使用:

SELECT Mid([StockNum],1,9) AS StockTrim, "Trim #:" & StockTrim AS StockTrimNumber 

的StockTrimNumber場,這比StockTrim計算字段樣本SELECT子句發生以後,可以用在自己的領域定義StockTrim計算領域。

在你的情況下,連接發生在任何字段被計算或返回之前,所以你需要在你的JOIN子句中重複字段定義。同樣,如果您想根據計算出的字段進行過濾,則需要使用字段定義本身(例如,WHERE Mid([StockNum],1,9) LIKE "???XYZ???"),但單獨使用別名將失敗(例如,WHERE StockTrim Like "???XYZ???")。

+0

我得到了一個語法錯誤:查詢表達式中Mid([StockNum],1,9)其中[STOCK DICTIONARY] .Stock爲空「'(缺少運算符)'。如果我將'Where'更改爲'Having',則會顯示以下消息:'您嘗試執行的查詢不包含表達式'[STOCK DICTIONARY] .Stock Is Null'作爲聚合函數的一部分。「# – Rick

+0

對不起,我混淆了WHERE和GROUP BY子句的順序。我更新了我的答案。請嘗試一下,讓我知道它是否有效。 – mwolfe02

0

既然你接受了mwolfe02的好回答,我希望問題解決了。我想指出的是,由於StockTrim是立即結構,而不是場POs,你可能有麻煩:

ON POs.[StockTrim] = [STOCK DICTIONARY].[Stock] 

您可能有成功:

ON [StockTrim] = [STOCK DICTIONARY].[Stock] 

這將假設有在STOCK DICTIONARY中沒有名爲StockTrim的字段。

請稍等 - 如果您避免在名稱中使用包括表格和查詢在內的對象名稱中的所有空格,則在Access中會更好。例如,STOCK DICTIONARY將更好地工作,如STOCK_DICTIONARY

+0

我收到錯誤消息:「不支持JOIN表達式」。 – Rick