如何将 LOOKUP 函数从 Excel 转换为 Access?

How can I translate the LOOKUP function from Excel to Access?

提问人:Lau G 提问时间:10/19/2023 最后编辑:June7Lau G 更新时间:10/19/2023 访问量:49

问:

我有两张桌子:

一个,我有一个值范围和我希望我的查询提供的描述。

最小值 最大 val 描述
0 100 此客户端有 0 到 100 天
101 500 此客户端有 101 到 500 天

表 2 包含客户端的 ID 和天数:

编号 # 天数
编号: id0005 50
编号:id0007 499

当我使用 Excel 时,我使用 LOOKUP 函数解决了这个问题,但是,数据库真的很大,我需要将其转换为 Access。到目前为止,我一直在使用 IIf 函数: 即 IIf (# DAYS BETWEEN 0 AND 100, “This client has 0 to 100 days”, IIf (# DAYS BETWEEN 101 AND 500, “This client has 101 to 500 days”, NEXT CASE)

但是我的表 1 有很多案例,大约 20 个,所以我想知道是否有更简单的方法可以做到这一点。 谢谢!

Excel MS-Access

评论


答:

2赞 June7 10/19/2023 #1

请考虑以下可在查询、文本框或 VBA 中使用的表达式:

DLookup("Description", "Table1", [# Days] & " BETWEEN [min val] AND [max val]")

域聚合函数可能会导致使用非常大的数据集进行查询时性能下降。不幸的是,替代方案可能并不更好:

SELECT Table2.ID, Table2.[# Days], Description
FROM Table2, Table1
WHERE Table2.[# Days] Between Table1.[min val] And Table1.[max val];

缺少 JOIN 子句将采用笛卡尔关系,因此每个表的每条记录都与其他表的每条记录相关联。如果每个表有 1,000 条记录,则数据集将为 1,000,000 条记录。WHERE 子句限制输出。

查看此对非等接问题的解释。https://www.oreilly.com/library/view/access-cookbook/0596000847/ch01s10.html

强烈建议不要在命名约定中使用空格或标点符号/特殊字符。

0赞 Darren Bartrup-Cook 10/19/2023 #2

您可以在 >= 和 <= 上连接表,尽管我不知道幕后发生了什么 - 它是否首先创建笛卡尔连接,以及它是否比@June7提供的 SQL 更快。

SELECT  ID, Description 
FROM    Table2 LEFT JOIN Table1 ON Table2.[# Days]>=Table1.[min val] AND  
                                   Table2.[# Days]<=Table1.[max val] 

此查询不能在设计视图中表示,只能在 SQL 视图中表示。

LEFT JOIN 可确保从 Table2 中取回所有内容。描述将保持 NULL,其中 # 天超出表 1 中给出的范围。

评论

0赞 June7 10/19/2023
我正要修改我的答案,把这个包括在内。如前所述,必须在 SQL 视图中键入 JOIN ON,不能在设计视图中生成。
1赞 June7 10/19/2023
尝试切换到“设计视图”将生成错误,并且不显示 JOIN。但是,我注意到这些错误并不总是出现在后续尝试中。因此,查询将打开到设计视图,只是不会显示任何 JOIN 链接。切换回 SQL 视图,语法仍然保持不变。但是,如果从“设计”视图中保存,则 JOIN ON 将丢失。我在每个表中使用了 2 条记录进行了测试。错误弹出了 4 次。