MS Access 03 - 更新查询条件的一个字段中有多个“ifs”?

Posted

技术标签:

【中文标题】MS Access 03 - 更新查询条件的一个字段中有多个“ifs”?【英文标题】:MS Access 03 - muliplte "ifs" in one field of update query's criteria? 【发布时间】:2009-07-21 23:50:57 【问题描述】:

我可以运行更新查询并在一个字段中运行多个更新,例如:

“joe doe”更新为 334,“barry davis”更新为 456,等等

基本上我想将名称转换为数字(在我的情况下,它将是员工 ID#),而且我有大约 500 名员工,所以一次一个人有点不可能。该表是从 excel 导入的,我不知道如何执行此预导入 ethier!

感谢您的帮助!

【问题讨论】:

+1 表示 Ed Harper 的说明,我将进一步评论说,您有一个很酷的机会可能会看到更多数据库的优点以及 Excel-as-a-Database 无法提供的原因. 如果您想获得在 Excel 中分配的数字并且您确实有 ID(您似乎必须这样做),那么 VLookup 可能是一个典型的解决方案。但不要那样,使用 Access。我会将此作为“答案”,但您可能会这样做! 鉴于您在下面我的回答中的 cmets,您的问题比您已经发布的要复杂一些。请您编辑您的问题以在 Access 中添加 UserID 表和 Schedule 表结构的详细信息吗? 请同时添加一些示例输入和预期输出 【参考方案1】:

虽然可以在 Access 中使用多个 Iif 语句,但您可能希望改用 Access 中的更新查询来执行此操作。

如果没有您的数据源的更多详细信息,很难确定 - 我在这里假设您的 Access 中已经有一个表,其中列出了用户名到他们的 ID(我称之为用户)。如果您还没有列出用户名和 ID 的 Access 表,则需要获得一个。

我还假设您已将要更新的数据从 Excel 导入到名为 ExcelImport 的表中。

显然,您需要将我的示例中使用的表名替换为您的实际表名。

与其替换 Excel 数据中的用户名,不如在 ExcelImport 上添加一个新列来保存用户 ID。

    创建新查询(“在设计视图中创建新查询”)

    将 Users 和 ExcelImport 表添加到您的查询中

    通过在“用户”表上的“用户名”字段之间单击并拖动,然后在 ExcelImport 上的“用户名”字段上释放,创建表之间的链接。这会将两个表在该字段上链接在一起。

    将查询类型更改为更新(查询>更新查询)

    双击 ExcelImport 用户名字段(或其他用户 ID 字段,如果您正在使用它)以将其作为更新目标。它应该出现在查询设计器下半部分的第一列中。

    在此列的“更新至:”字段中,输入 [Users].[UserID]

    运行查询。应该会出现一个消息框,要求您确认是否要更新 n 行。点击确定确认。

鉴于您的数据来自 Excel,您应该检查所有用户 ID 是否已正确设置,因为 Excel 数据中的“Joe Doe”可能在用户表中存储为“Joseph Doe” - 其中在这种情况下,您需要手动编辑 Excel 数据以获取匹配项。

【讨论】:

UserID 表有一个键,即访问中的自动编号/ID 字段。这很好。它也有名字,还有 DIVISION#(让我们说 a、b 或 C),而我真正需要做的是计算每个旅行/月/季度的这些类型......无论如何。因此,当我尝试将包含所有名称的此计划表的字段设置为查找字段时,它不起作用,因为即使我设置了姓氏,它也想查看数字(我假设是自动编号)。我很难将名称设置为键,因为名称有多个,并且添加首字母是多余的! 但我追求的是某种方法来计算给定参数(行程、月份、季度)...那么你能建议在桌子之后解决这个问题的方法吗?交叉表查询??不知道该怎么做? @Justin - 更新成功了吗?您的 UserID 表中的名称与导入的计划数据之间的匹配程度是否不错?【参考方案2】:

我有大约 500 名员工,所以一个 时间有点问题了

绝对:)

使用唯一INTEGER 值的标准问题序列表考虑这一点:

SELECT SWITCH(
              seq = 1, 1, 
              seq = 2, 2, 
              seq = 3, 3, 
              seq = 4, 4, 
              seq = 5, 5, 
              seq = 6, 6, 
              seq = 7, 7, 
              seq = 8, 8, 
              seq = 9, 9, 
              seq = 10, 10, 
              seq = 11, 11, 
              seq = 12, 12, 
              seq = 13, 13, 
              TRUE, 999
             ) AS seq_1
FROM Sequence;

超过 14 种情况会生成错误,“查询表达式中的表达式太复杂”。所以我认为你不会得到接近 500 箱的情况!

最好把它做成一个查找表。

【讨论】:

以上是关于MS Access 03 - 更新查询条件的一个字段中有多个“ifs”?的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 更新 Oracle 数据库 - 查询问题

在 MS Access 查询中计算数字的幂

MS-Access 中的多个日期范围

MS Access 更新查询和带字符串参数的内部连接

使用模式匹配更新(MS Access)

查询不使用 MS-Access 中的日期条件进行拉取