我有一个包含四列的Excel表格:
Excel表显示ID#1和ID#2之间的一对一关系/伙伴关系 - ID#1的列告诉我我引用的是谁,而ID#2的列告诉我ID#1与...合作。 ID#1的单个值可以与ID#2的多个值配对。列表中较早的ID#2值可以稍后列为ID#1,并与新值合作。从理论上讲,您可以在ID之间建立相当长的关系链,具体取决于它们的合作方式。
我希望能够运行一个查询,告诉我与特定ID相关的所有ID,无论它们分开多远。例如,如果A与B相关,B与C和D相关,而D与E相关,当我在A上运行查询时,我想看到A与B,C,D和E(因为它们共享一个连接)。它不必是单个实例的查询 - 它可能只是具有相关ID的唯一ID值的完整列表。
我在Excel和Access中集思广益,通过公式来做到这一点,但我画了一个空白。关于如何实现这一点的任何想法?
答案 0 :(得分:0)
在ORACLE SQL中,我使用CONNECT BY
/ START WITH
子句进行分层查询。 MS Access不支持此功能。
在Excel中,我在管理者及其报告之间的层次结构上下文中使用了一个小VBA。它以递归方式调用并打印层次结构级别。因此,如果您“只是”想知道谁与谁有关,请过滤所有非空白。
Sub PrintHierarchy()
Dim T As Range, Idx As Integer, Level As String, Root As String
Root = Selection
Set T = [DataTable]
'start recursion
GetReport T, Root, "1"
End Sub
Sub GetReport(T As Range, Boss As String, Level As String)
Dim Idx As Integer, Num As Integer
Idx = 2
Num = 1
Do While T(Idx, 1) <> ""
If T(Idx, 1) = Boss Then
T(Idx, 3) = "'" & Level & "." & Num
Num = Num + 1
GetReport T, T(Idx, 2), T(Idx, 3)
End If
Idx = Idx + 1
Loop
End Sub
在开始此示例之前,选择列[A:C]并将它们命名为“DataTable”。然后将光标放在根节点的Boss列上并运行Sub PrintHierarchy()
: