1

我有一个数据集,我试图找到相互引用的结果。我有一个表,其中包含“应用程序”。应用程序涉及 2 方(人)。这些是“申请人”和“接收者”。

我需要了解如何获取“A”人是申请人和“B”人是接收人的数据,然后他们在哪里反向转发了另一个申请。因此,“B”人是申请人,“A”人是接收人。我需要将这两行都作为结果集中的 1 行返回。

我的数据结构如下所示:

Application ID, Applicant Name, Applicant DOB, Receiver Name, Receiver DOB
1, Bob SMITH, 12/06/1980, Joe SMITH, 10/10/1979
2, Joe SMITH, 10/10/1979, Bob SMITH, 12/06/1980
3, Betty DAVIS, 15/05/1986, Barry DAVIS, 29/07/1981
4, Barry DAVIS, 29/07/1981, Betty DAVIS, 15/05/1986

如您所见,有 4 个应用程序,但实际上只有 2 个“交叉应用程序”。我试图让最终结果看起来像这样,显示独特的跨应用程序:

Application ID 1, Applicant Name 1, Applicant DOB 1, Receiver Name 1, Receiver DOB 1, Application ID 2, Applicant Name 2, Applicant DOB 2, Receiver Name 2, Receiver DOB 2
1, Bob SMITH, 12/06/1980, Joe SMITH, 10/10/1979, 2, Joe SMITH, 10/10/1979, Bob SMITH, 12/06/1980
3, Betty DAVIS, 15/05/1986, Barry DAVIS, 29/07/1981, 4, Barry DAVIS, 29/07/1981, Betty DAVIS, 15/05/1986

我唯一可以比较两个应用程序的是名称和 DOB(这是对我的约束。这很烦人,因为有时人们拼写不同的名称或输入错误的 DOB)。我只想返回两个人都匹配的交叉应用程序。

我想我需要将行“N”加载到游标中,并将名称和 DOB 与数据集中的每一行(N+1 到 N+n)进行比较,如果找到任何匹配项,则将它们放入输出并移动到下一行。我不确定如何做到这一点,如果有人可以提供任何建议,我希望得到一些帮助。谢谢!

4

1 回答 1

1

请尝试以下

    SELECT A.Application_ID "Application ID1",
           A.Applicant_Name "Applicant_Name1",
           A.Applicant_DOB "Applicant_DOB1",
           A.Receiver_Name "Receiver_Name1",
           A.Receiver_DOB "Receiver_DOB1",
           B.Application_ID "Application ID2",
           B.Applicant_Name "Applicant_Name2",
           B.Applicant_DOB "Applicant_DOB12",
           B.Receiver_Name "Receiver_Name2",
           B.Receiver_DOB "Receiver_DOB2"

      FROM     Applications A, Applications B
      WHERE   A.Applicant_Name=B.Receiver_Name
      AND      B.Applicant_Name=A.Receiver_Name
                AND      B.Receiver_DOB =A.Applicant_DOB 
                AND      A.Receiver_DOB =B.Applicant_DOB;
于 2012-07-10T06:00:12.367 回答