我正在尝试使用查询中的函数加入别名字段。这在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 ,但Access会显示"输入参数值" POs.StockTrim的输入框
答案 0 :(得分: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字段稍后出现在该样本SELECT子句中,而不是StockTrim计算字段,可以在其自己的字段定义中使用StockTrim计算字段。
在您的情况下,连接发生在计算或返回任何字段之前,因此您需要在JOIN子句中重复字段定义。
同样,如果您想根据计算字段进行过滤,则需要使用字段定义本身(例如WHERE Mid([StockNum],1,9) LIKE "???XYZ???"
),但仅使用别名会失败(例如WHERE StockTrim Like "???XYZ???"
)。
答案 1 :(得分:0)
既然你接受了mwolfe02的好答案,我希望问题得到解决。我想指出,由于StockTrim
是一个直接构造,而不是POs
中的字段,因此您可能遇到以下问题:
ON POs.[StockTrim] = [STOCK DICTIONARY].[Stock]
您可能会成功:
ON [StockTrim] = [STOCK DICTIONARY].[Stock]
假设StockTrim
中没有名为STOCK DICTIONARY
的字段。
暂且不说 - 如果你避免在对象的名称中使用空格,包括表和查询,那么你在Access中会更好。例如,STOCK DICTIONARY
将更好地用作STOCK_DICTIONARY
。