Oracle查询将结果行与另一个进行比较,如果找到匹配则输出

时间:2012-07-10 03:35:24

标签: oracle cursor compare

我有一个数据集,我正在尝试找到相互引用的结果。我有一张桌子,有#34;应用程序"在里面。有两个参与者(人)参与了一个应用程序。这些是申请人"和接收者"。

我需要了解如何获取人员和#34; A"一直是申请人和人员" B"一直是接收者,然后他们反向转发另一个应用程序。那么人和#34; 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个和34个交叉应用程序。我试图得到一个最终结果,看起来像这显示了独特的跨应用程序:

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

我想我需要加载Row" N"进入游标并将Name和DOB与数据集中的每一行(N + 1到N + n)进行比较,如果找到任何匹配,则将它们放入输出并继续下一行。我不知道该怎么做,如果有人可以提出任何建议,我想要一些帮助。谢谢!

1 个答案:

答案 0 :(得分: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;