2017-05-31 101 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