提问人:Lau G 提问时间:10/19/2023 最后编辑:June7Lau G 更新时间:10/19/2023 访问量:49
如何将 LOOKUP 函数从 Excel 转换为 Access?
How can I translate the LOOKUP function from Excel to Access?
问:
我有两张桌子:
一个,我有一个值范围和我希望我的查询提供的描述。
最小值 | 最大 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 个,所以我想知道是否有更简单的方法可以做到这一点。 谢谢!
答:
请考虑以下可在查询、文本框或 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
强烈建议不要在命名约定中使用空格或标点符号/特殊字符。
您可以在 >= 和 <= 上连接表,尽管我不知道幕后发生了什么 - 它是否首先创建笛卡尔连接,以及它是否比@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 中给出的范围。
评论