2017-01-05 6 views
0

以下のコードは、適切な顧客、ロッカー、ユニット、および残高を返します。ただし、コメントアウトされたコードを追加すると、各顧客は1つのクラブのメンバーにしかなれないものの、各クラブの各顧客のデータが再表示されます。T-SQLが重複した行を返す理由I Believe

Customer No. Locker Unit Current Balance 
1    315  A1  456.00 
2    316  A3  1204.70 
3    317  B2  335.60 
4    318  B4  1500.30 

をしかし、私はコメントアウトされたコードが含まれる場合、私は得る:あるように私はそれを実行した場合

USE db1 
GO 

SELECT [db1].[dbo].[Customer].[CustomerNumber] AS 'Customer No.' 
-- ,A. ClubID AS 'Club ID No.' 
,(SELECT CONCAT (SI.Locker, '-', SI.Frequency)) AS Locker 
,SI.Unit AS Unit 
--,[db2].[dbo].[vueClub].Club_aka AS Club 
,[db1].[dbo].[Customer_Balance].[CurrentBalance] 

FROM [db1].[dbo].[Customer_Balance] 
JOIN [db1].[dbo].[Customer] 
    ON [db1].[dbo].[Customer_Balance].POSCusNo = Customer.CustomerNumber 
    JOIN [SQLSrv01].[ db3].[dbo].[md_Table_1] AS D 
    ON D.Contract_no = [db1].[dbo].[Customer_Balance]. POSCusNo 
    JOIN [SQLSrv01].[ db2].[dbo].[vueSoldLockers] AS SI 
    ON SI.CustomerID = [db1].[dbo].[Customer].CustomerID 
    --JOIN [db2].[dbo].[vueClub] AS A 
    --ON [db1].[dbo].[Customer].SiteID = A.SiteID 
WHERE [db1].[dbo].[Customer_Balance].StatusCode = '1234' 
ORDER BY Customer.CustomerNumber ASC 

は、だから私は、取得

Customer No. Club ID No Locker Unit Club Current Balance 
1   4   315  A1  Tigers 456.00 
1   3   315  A1  Lions 456.00 
2   4   316  A3  Tigers 1204.70 
2   3   316  A3  Lions 1204.70 
3   4   317  B2  Tigers 335.60 
3   3   317  B2  Lions 335.60 
4   4   318  B4  Tigers 1500.30 
4   3   318  B4  Lions 1500.30 

はそれを私はしませんので、 JOINは正しく設定されていますか?

+0

テーブルの顧客とvueClubのキーは何ですか?あなたが不完全な鍵に参加しているようだが、他の人が指摘するように、vueclubにはサイト用の複数のクラブがある。おそらくあなたはサイト以上に加わる必要がありますか?サイトは1:Mのクラブであり、ユーザーはサイトと1:1の関係にあるように見えるので、顧客とサイトの間に1:Mがあるため、レコードが繰り返されます。解決するには、完全なキーに参加する必要があります。顧客とVueClubのDDLを提供する。 DB関係は人生のものと似ています。あなたは彼らの立場を理解しているか、彼らに火をつけてください。 – xQbert

答えて

0
Customer No. Club ID No Locker Unit Club Current Balance 
1   4   315  A1  Tigers 456.00 
1   3   315  A1  Lions 456.00 

お客様はvirClubにSiteIDで参加しています。お客様のサイト1のようで、2つのクラブ(3,4)

関連する問題