2017-02-10 59 views
1

我在SQL Server 2012下表消除重複。結果應該是這樣的:SQL服務器:</p> <p><a href="https://i.stack.imgur.com/ZInN5.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ZInN5.png" alt="enter image description here"></a></p> <p>,我需要選擇不同的行,只有其聯繫等於「自己」:基於兩列

enter image description here

我嘗試以下查詢:

with cte as 
(
    select 
     row_number() over (partition by contact order by SiteNum) rn, 
     SiteNum, SiteAdd, Description, Contact 
    from 
     Name 
) 
select * 
from cte 
where rn = 1 

我不知道,如果它可以像使用臨時表或where子句不同的方法來實現。

回答

1

我認爲你需要按SiteNum進行分區,並按Contact排序,這與你所做的相反。但除此之外,你的方法似乎是正確的。試試這個查詢:

with cte as 
(
    select row_number() over (partition by SiteNum 
     order by case when Contact = 'Own' then 0 else 1 end) rn, 
     SiteNum, SiteAdd, Description, Contact 
    from Name 
) 
select * from cte 
where rn = 1 

請注意,我用了一個CASE表達的ORDER BY條款,明確檢查一個叫做「自己的」接觸。我們可以嘗試使用MIN()MAX(),並依賴於具有NULL的非匹配記錄,但如果您的表除了「Own」之外還有其他聯繫值,則可能會導致問題發生。

0

這where子句應該給你什麼你期待

Select DISTINCT SiteAdd from table where Contact = 'Own' 

你可以把不同的整個行上也,萬一有重複的行。

Select DISTINCT * from table where Contact = 'Own' 

您的原始查詢將基於邏輯工作。只要改變錯字:

wehre RN = 1到RN = 1

希望它能幫助。

+0

如果我包含contact ='Own'的地方,我不會回到第2行(SiteNum 2)。 – user2536008

相關問題

 相關問題