2017-05-31 137 views
0
Clientcode Emailaddress Accountcode clientname  phoneno 
---------------------------------------------------------------- 
AAA   [email protected]  100  Berjeya   90909090 
AAA   [email protected]  100  Berjeya   90909090 
AAABBB  [email protected]  200  Berjeya sooo 3222 
CCCC  [email protected]  200  Berjeya klkl 123 
dddd  [email protected] 33300  Berjeya penn 33333 

這是我的表中的數據,我需要刪除具有相同客戶端代碼和帳戶代碼的任何一個電子郵件地址。例如,電子郵件地址[email protected][email protected]具有相同的客戶端代碼和帳戶代碼,但電子郵件地址不同;我只需要顯示其中一個電子郵件地址和所有記錄。請爲此提出合適的查詢。SQL Server:加入最高記錄選擇

+0

看起來這是SQL Server的問題...做標記,到SQL Server –

回答

3

您可以使用頂部1如下關係:

Select top (1) with ties * from yourtable 
    order by row_number() over(partition by ClientCode,AccountCode order by EmailAddress) 

與子查詢,你可以做類似下面

Select * from (
    Select *, RowN = Row_Number() over(partition by ClientCode, AccountCode order by EmailAddress) from yourtable 
) a where a.RowN = 1 
+0

gr8 !!!多數民衆贊成工程 – ragu

+1

我喜歡這個,它是一個聰明的小竅門,刪除需要一個子查詢,但是,[我剛剛完成的測試](http://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=9befc63c4ebcf17ce367c357bd48c776)它出現對於優化者來說太聰明瞭。它會導致一個額外的排序,並且一直執行比在row_number()'計算中使用具有外部謂詞的子查詢更糟的結果。 – GarethD

+0

Gareth上面的一個是非常好的技巧..但我可以知道我們如何使用子查詢可以做到這一點,你可以給我一些示例查詢上述記錄? – ragu