2012-07-10 145 views
1

我有一个数据集,我试图找到相互引用的结果。我有一个有“应用程序”的表格。有2方(人)参与应用程序。这些是“申请人”和“接收人”。Oracle查询将结果行与另一个进行比较,如果发现匹配,则输出

我需要了解如何获取数据,其中人员“A”是申请人,而人员“B”已经是接收者,然后他们已经在哪里转发了另一个应用程序。所以,当人“B”是申请人时,“A”人是接收者。我需要将这两行作为结果集中的一行返回。

我的数据结构是这样的:

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)。我只想返回两个人都匹配的交叉应用程序。

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

回答

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; 
相关问题