简体   繁体   中英

Sql Inner Join with distinct values

I have 3 tables:

  • Bank Transfer
  • Beneficiaries
  • Callback_Procedure

I have to join those 3 tables with an inner join.

In the Bank Transfer, I have a column Number , and the Number is repeated in the Beneficiaries and Callback table.

In the Beneficiaries table, the number can repeat more than once.

When running my inner join query, am getting more than 1 result instead of getting unique values.

In the Beneficiaries table, I also have a column Beneficial_Name and it is this column that uniquely identifies the result, however when running the join query, am getting duplicate results.

I have tried distinct option, not to great result.

Below is my code - can someone please help me out?

SELECT DISTINCT   
    dbo.BT_Beneficiaries.Beneficial_Name,   
    dbo.Bank_Transfer.Number, dbo.Bank_Transfer.Start_Date, 
    dbo.Bank_Transfer.Team_Name, dbo.Bank_Transfer.Initiator, 
    dbo.Bank_Transfer.Staff, dbo.Bank_Transfer.Process_Name, 
    dbo.Bank_Transfer.Company_Name, dbo.Bank_Transfer.Billing_Amount, 
    dbo.Bank_Transfer.Entry_ID, dbo.Bank_Transfer.Instructions, 
    dbo.Bank_Transfer.BT_Count, dbo.Bank_Transfer.Misspelled, 
    dbo.Bank_Transfer.Sender, dbo.Bank_Transfer.Odd, 
    dbo.Bank_Transfer.Email, dbo.Bank_Transfer.Beneficiary, 
    dbo.Bank_Transfer.Address, dbo.Bank_Transfer.Urgent,
    dbo.Bank_Transfer.Payment, dbo.Bank_Transfer.Sperry, 
    dbo.Bank_Transfer.Contact, dbo.Bank_Transfer.Reasonable, 
    dbo.Bank_Transfer.Evidence_Completed, dbo.Bank_Transfer.End_Date, 
    dbo.Bank_Transfer.First_Mgr_Approval_Name, dbo.Bank_Transfer.First_Mgr_Approval, 
    dbo.Bank_Transfer.First_Mgr_Approval_Date, dbo.Bank_Transfer.CallBack_Workings, 
    dbo.Bank_Transfer.CallBack_Agreement, dbo.Bank_Transfer.CallBack_Procedure, 
    dbo.Bank_Transfer.Second_Mgr_Approval_Name, dbo.Bank_Transfer.Second_Mgr_Approval,
    dbo.Bank_Transfer.Second_Mgr_Approval_Date, dbo.Bank_Transfer.IB, 
    dbo.Bank_Transfer.IB_Date, dbo.Bank_Transfer.ITL_Signatory_Approval, 
    dbo.Bank_Transfer.ITL_Signatory_Name, 
    dbo.BT_Beneficiaries.Account_Number, dbo.BT_Beneficiaries.Currency, 
    dbo.BT_Beneficiaries.Payment_Details, dbo.BT_Beneficiaries.CurrencyPayment, 
    dbo.BT_Beneficiaries.Amount, dbo.BT_Beneficiaries.Purpose, 
    dbo.BT_Beneficiaries.Evidence, dbo.BT_Beneficiaries.Due_Diligence, 
    dbo.BT_Beneficiaries.WC, dbo.BT_Beneficiaries.Resolution_Directors,
    dbo.BT_Beneficiaries.Manager_Approval, dbo.BT_Beneficiaries.Mgr_Approval_Date, 
    dbo.CB_BankAccount.Number AS Expr3, dbo.CB_BankAccount.Company_Name AS Expr4, 
    dbo.CB_BankAccount.Bank_Name, dbo.CB_BankAccount.Bank_Account, 
    dbo.CB_BankAccount.Currency AS Expr5, dbo.CB_BankAccount.Balance, 
    dbo.CB_BankAccount.Bank_Mandate, dbo.CB_BankAccount.Signing_Arrangement AS Expr6,
    dbo.CB_CallBack_Procedure.Number AS Expr8, dbo.CB_CallBack_Procedure.CallStatus, 
    dbo.CB_CallBack_Procedure.Person_CalledBack, dbo.CB_CallBack_Procedure.DateTime,
    dbo.CB_CallBack_Procedure.Notes, dbo.CB_CallBack_Procedure.Mgr_Approval, 
    dbo.CB_CallBack_Procedure.DateTime_Approval, dbo.CB_CallBack_Procedure.Bank_DateTime 
FROM 
    dbo.Bank_Transfer 
INNER JOIN  
    dbo.BT_Beneficiaries ON dbo.Bank_Transfer.Number = dbo.BT_Beneficiaries.Number 
INNER JOIN 
    dbo.CB_BankAccount ON dbo.BT_Beneficiaries.Number = dbo.CB_BankAccount.BT_Number 
INNER JOIN 
    dbo.CB_CallBack_Procedure ON dbo.CB_BankAccount.BT_Number = dbo.CB_CallBack_Procedure.Number

Just add a WHERE clause that specifies what the Benficial_Name column needs to say to identify the unique record:

WHERE Beneficiaries = 'Unique Record'

Edit this to say whatever you need. You can put this after the joins.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM