2012-07-10 147 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; 
相關問題