如何从Access中的不同列中查找第一个非空值?

问题描述 投票:0回答:2

我正在尝试构建一个查询,在其中可以获得多个列中可用的第一个非空 id

所以我的主表是这样的,

员工编号 名字 经理
1 约翰
2 母鹿
3
4 菲尔
5

我想从下表查找经理

员工编号 经理ID 高级经理ID 导演ID 高级总监ID
1 21 22 23 24
2 22 23 24
3 23 24
4 24
5 22 23 24

我的输出应该是这样的

员工编号 名字 经理
1 约翰 21
2 母鹿 22
3 23
4 菲尔 24
5 22

所以基本上,我尝试使用这个 IIF 函数来执行嵌套 if 和 switch 函数。 两者都没有返回我期望的输出。 谢谢!

编辑1:我尝试使用Nz,但它适用于ManagerID和SeniorManagerID,但由于某种原因不适用于DirectorID和SeniorDirectorID。 意思是,我可以获得 ManagerID 和 SeniorManagerID,但对于其他 2 个,它返回空白。

编辑2:我尝试将查询更改为而不是检查NULL,我尝试将其更改为空字符串,但仍然不起作用。

sql ms-access ms-access-2010 ms-access-2007 ms-access-2013
2个回答
2
投票

Access中使用Nz()函数

SELECT Nz(ManagerID, Nz(SeniorManagerID, Nz(DirectorID, Nz(SeniorDirectorID, "None")))) AS Person FROM tablename;

否则,使用 IIf() 或 Switch 和 IS NULL 的表达式将会更长。更多信息http://allenbrowne.com/QueryPerfIssue.html#Nz


0
投票

按照以下代码执行 您可以从这里下载链接 https://www.mediafire.com/file/3s6l9vjtdi4uzau/TestDB.accdb/file

    Private Sub Command3_Click()
    DoCmd.SetWarnings False
    Dim rs     As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("SELECT [employee id], [manager id], [senior manager id], [director id], [senior director id] " & _
        "FROM tblmanagers")
    If Not (rs.EOF And rs.BOF) Then
        rs.MoveFirst
        Do Until rs.EOF = True
            Dim MyManager  As Integer
            If Nz(rs![senior director id] & "") <> vbNullString Then
                MyManager = rs![senior director id]
            End If
            If Nz(rs![director id] & "") <> vbNullString Then
                MyManager = rs![director id]
            End If
            If Nz(rs![senior manager id] & "") <> vbNullString Then
                MyManager = rs![senior manager id]
            End If
            If Nz(rs![manager id] & "") <> vbNullString Then
                MyManager = rs![manager id]
            End If
            CurrentDb.Execute "UPDATE tblemployees SET " & _
                              "[employee manager] = " & MyManager & " " & _
                              "WHERE [employee id] = " & rs![employee id] & ""
            rs.MoveNext
        Loop
    Else
    End If
    rs.Close
    Set rs = Nothing
End Sub

© www.soinside.com 2019 - 2024. All rights reserved.