В Access можно создать запрос, чтобы найти корень заданной вами работы.
Не забывайте о силе функций VBA. Вы можете создать рекурсивную функцию в модуле VBA и использовать ее результат в качестве поля вывода в своем запросе.
Пример:
Public Function JobRoot(Id As Long, ParentId As Long) As Long
If ParentId = 0 Then
JobRoot = Id
Exit Function
End If
Dim Rst As New ADODB.Recordset
Dim sql As String
sql = "SELECT Id, ParentID FROM JobTable WHERE Id = " & ParentId & ";"
Rst.Open sql, CurrentProject.Connection, adOpenKeyset, adLockReadOnly
If Rst.Fields("ParentID") = 0 Then
JobRoot = Rst.Fields("Id")
Else
JobRoot = JobRoot(Id, Rst.Fields("ParentID")) ' Recursive.
End If
Rst.Close
Set Rst = Nothing
End Function
Вы можете вызвать эту рекурсивную функцию из вашего запроса, используя построитель запросов или просто введя имя функции с аргументами в поле запроса.
Это даст рут.
(я признаю, что ФП уже год, но я вынужден ответить, когда все скажут, что невозможное возможно).