是否可以在IIF语句的逻辑测试中使用SQL查询?我有一张员工表,其中包含了人们所期望的所有一般员工信息。其中一个字段IsManager
是一个布尔值,我使用IIF语句根据某人是否设置为true来更改查询的输出。
我遇到的问题是当我将它应用于一对多表时,它正在检查当前记录是否将IsManager字段设置为true。我想检查当前查询的人是否将该字段设置为true。
SELECT TB2.ID, IIF(TB1.IsManager, TB1.LastName, 'Restricted'), IIF(TB1.IsManager, TB1.FirstName, 'Restricted')
FROM TB1 INNER JOIN TB2 ON TB1.EmployeeNumber = TB2.EmployeeNumber
如果我正在检查的记录有IsManager=True
,则此方法有效。我想检查当前用户的IIF语句,我在其他查询中使用以下
SELECT IsManager
FROM TB1
WHERE Username=currentUser
currentUser
是VBA变量Environ("USERNAME")
,其中也记录在员工详细信息表中。
我可以将这些结合起来并使用上述查询执行IFF,例如:
SELECT IIF(SELECT IsManager
FROM TB1
WHERE Username=currentuser, TB1.LastName, 'Restricted') FROM .... etc etc
如果没有,我可以使用MC Access SQL可用的替代方法
答案 0 :(得分:0)
你只需要两个这样的连接
SELECT
TB2.ID,
IIF(AM_I_MANAGER.IsManager, TB1.LastName, 'Restricted'),
IIF(AM_I_MANAGER.IsManager, TB1.FirstName, 'Restricted')
FROM TB1
CROSS JOIN TB1 AS AM_I_MANAGER ON AM_I_MANAGER.Username=currentUser
JOIN TB2 ON TB1.EmployeeNumber = TB2.EmployeeNumber
我们在这里使用交叉联接,因为AM_I_MANAGER.Username=currentUser
将返回1行。然后,我们对TB1表的每一行使用这一行(因此交叉连接仅为"交叉" 1行)。如果该过滤器返回多行,则无法获得良好的结果。
答案 1 :(得分:0)
您可以在查询中使用 DLookup :
PARAMETERS Username Text (255);
SELECT
TB2.ID,
IIF(DLookup("IsManager", "TB1", "Username = '" & Username & "')"), TB1.LastName, 'Restricted'),
IIF(DLookup("IsManager", "TB1", "Username = '" & Username & "')"), TB1.FirstName, 'Restricted')
FROM
TB1
INNER JOIN
TB2
ON TB1.EmployeeNumber = TB2.EmployeeNumber