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,但 Access 会为 POs.StockTrim 显示“输入参数值”输入框

4

2 回答 2

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???")。

于 2013-07-19T19:58:48.637 回答
0

既然您接受了 mwolfe02 的出色回答,我希望问题得到解决。我想指出,由于StockTrim它是一个直接构造,而不是 中的一个字段POs,您可能会遇到以下问题:

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

您可能会成功:

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

这将假设没有在 中命名StockTrim的字段STOCK DICTIONARY

顺便说一句 - 如果您避免在对象(包括表和查询)的名称中使用所有空格,则在 Access 中会更好。 STOCK DICTIONARY例如,将更好地工作STOCK_DICTIONARY

于 2013-07-19T22:16:36.507 回答