Excel - 多个ID之间的连接

时间:2015-05-21 16:00:28

标签: excel relationships

我有一个包含四列的Excel表格:

  1. ID#1(排序表)
  2. ID#2
  3. ID#2的属性A
  4. ID#2的属性B
  5. 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中集思广益,通过公式来做到这一点,但我画了一个空白。关于如何实现这一点的任何想法?

1 个答案:

答案 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()

enter image description here

enter image description here