我有一个数据集,我正在尝试找到相互引用的结果。我有一张桌子,有#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)进行比较,如果找到任何匹配,则将它们放入输出并继续下一行。我不知道该怎么做,如果有人可以提出任何建议,我想要一些帮助。谢谢!
答案 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;