1

我正在尝试使用 iif 语句(即:)将一列数据状态更改为另一列数据状态iif([major]="eet","electronic engineering technology")

我让它工作,直到我在名为 PLS 的组中添加了一个新专业。我得到一个框,指出表达式太复杂。

当我把那个拿出来时,它工作得很好。访问 iif 语句的数量是否有限制?

Majors: IIf([Major]="EET","Electronics Engineering Technology",
IIf([Major]="DMA","Digital Media Arts Technology",
IIf([Major]="BAM","Business Administration - Management ",
IIf([Major]="Ess","Industrial Electronics Technology - Electronic Security Systems",
IIf([Major]="FMT","Facilities Management Technology",
IIf([Major]="FMTC","Facilities Management Technology Certificate",
IIf([Major]="HIT","Health Information Technology",
IIf([Major]="HSE","Human Services",
IIf([Major]="HVAC","Heating, Ventilation, Air Conditioning and Refrigeration Technology",
IIf([Major]="IENET","Industrial Electronics Technology - Computer and Networking Track",
IIf([Major]="Auto","Automotive Technology",
IIf([Major]="AT","Accounting Technology",
IIf([Major]="IETC","Industrial Electronics Technology-  Computer Track",
IIf([Major]="IETR","Industrial Electronics Technology - Railway Electronics Systems",
IIf([Major]="PLS","test","Ophthalmic Dispensing"))))))))))))))
4

6 回答 6

1

一种选择是使用 Switch() 语句而不是 IIf():

Majors: Switch([Major]="EET","Electronics Engineering Technology",
               [Major]="DMA","Digital Media Arts Technology",
               ...,
               [Major]="PLS","test",
               True, "Ophthalmic Dispensing")

虽然 VBA Switch Function 似乎可以接受大量参数(在停止测试之前我已经深入了 22 级),但 Jet/ACE db 引擎的 Switch 实现似乎最多为 14 级。正如您正确指出的那样,它会窒息 15 或更多。

这似乎使查找表(如下所述)成为唯一实用的选择。(还有其他不太实用的选项,例如编写自己的 Switch() 函数,该函数采用任意数量的参数,但我认为当查找表在这里是一个如此明显的选择时,这很愚蠢。)


更好的选择是创建一个查找表并将其加入到您的查询中。如果您可以确定每个“主要”缩写在查找表中都有一行,请使用 INNER JOIN。如果您不能确定,请使用带有 Nz() 或 IIf() 的 OUTER JOIN。

于 2011-11-16T18:06:34.077 回答
0

创建一个两列查找表,填充您的IIF映射,然后加入该表。这将产生优势,例如参照完整性,当这些值更容易更改表而不是更改所有查询等时。

于 2011-11-17T10:04:24.863 回答
0

我要做的是为每个专业创建单独的查询,然后通过 iif 或 switch。最后,它可以帮助最终用户将数据导出到 powerpoint,因为他们不必对数据进行排序。

于 2011-11-17T13:44:35.587 回答
0

如果您有一个位于 MS SQL Server 上的后端并通过 ODBC 连接您的表,您可以CASE WHEN THEN END CASE在 SQL 代码中使用该语句,但在 MS Access 中您不能。

您可能会遇到的限制是 SQL 查询的堆栈深度限制:每个嵌套表达式都需要查询分析器更深入,并且在某个时间点您的堆栈耗尽然后失败。此外,SQL 查询中的符号总数是有限制的,但这已经足够大了,这里应该没问题。

DLookUp(Table, Field, Criteria)您的解决方案可能的快速克服(尽管它使您的查询实际上变慢)是将值放入单独的表并使用MS Access中的函数执行查找。或者,您可以通过缩写加入表格,然后将查询转换为完整的表格(也称为物化视图)。

于 2011-11-16T22:20:10.053 回答
0

我会使用这样的查询运行 VBA 循环

UPDATE TableName SET Major = [LongName] WHERE Major = [ShortName]

其中 [LongName] 和 [ShortName] 是参数。

但实际上,您最好将缩写留在列中并创建一个查找表,当您想要使用长名称时可以加入该查找表。它在数据存储方面效率更高。

于 2011-11-17T00:25:44.707 回答
0

在达到 MS Access 中开关功能的限制后,我来到了这里。万一它对我职位的任何人有所帮助,这就是我所做的。

我在 10 处达到了 switch 的极限。对我有用的是&用来组合两个 switch 语句。

Switch(CityName = "London", "English", 
              CityName = "Rome", "Italian", 
              CityName = "Paris", "French") code here
&
Switch(CityName = "New York", "English", 
              CityName = "Turin", "Italian", 
              CityName = "Bourgogne", "French")
于 2019-07-11T20:01:08.347 回答