我有一個簡單的查詢,返回給定客戶的電話號碼列表。用戶可以通過輸入他們地址的任何部分來搜索特定的客戶。客戶可以有多個電話號碼和地址。如何過濾掉由SQL中的JOIN引起的重複記錄?
這裏是我的查詢的示例:
SELECT
ROW_NUMBER() OVER(PARTITION BY Customer.CustomerNumber, ORDER BY PhoneNumber.PhoneNumber) RowNumber,
Customer.CustomerNumber,
PhoneNumber.PhoneNumber
FROM Customer
JOIN PhoneNumber ON PhoneNumber.CustomerId = Customer.Id
JOIN CustomerAddress on CustomerAddress.CustomerId = Customer.Id
下面是這個查詢是生產時,我有一個具有兩個電話號碼和兩個地址的客戶:
RowNumber CustomerNumber PhoneNumber
1 1 111-111-1111
2 1 222-222-2222
3 1 111-111-1111
4 1 222-222-2222
我想要的結果將沿着這些線:
RowNumber CustomerNumber PhoneNumber
1 1 111-111-1111
2 1 222-222-2222
我只能產生以上所需的結果當我刪除地址表上的連接時。
用戶應該能夠通過輸入在地址的任何部分來查找客戶(例如:我想說明,在鳳凰城地址的任何用戶)。雖然它不顯示在結果中,但仍應可過濾。
我覺得我能夠做這樣的事:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Test.CustomerNumber ORDER BY Test.PhoneNumber) RowNumber
FROM
(
SELECT
DISTINCT
CustomerNumber,
PhoneNumber.PhoneNumber
FROM Customer
JOIN PhoneNumber ON PhoneNumber.CustomerId = Customer.Id
JOIN CustomerAddress ON CustomerAddress.CustomerId = Customer.Id
) Test
嘗試添加字段從地址到結果,看看有什麼重複。數據庫可能允許每個客戶有多個地址。 – SMM
然後刪除加入到地址表。無論如何,你並沒有使用它。 – RBarryYoung
任何你不使用DISTINCT的原因? – SteveJ