回答

收藏

MS SQL 2008联接-从众多结果中选择一种

技术问答 技术问答 295 人阅读 | 0 人回复 | 2023-09-12

我试图操作以下查询,但我不确定如何将其限制为一个结果。在以下查询中,clientcontactid
2 \" P* w% G7 q  K$ k# j21901工作的客户端有两个地址,表示返回两个结果。
) Z" v$ e; a+ F% r" J询问:) _$ E! x+ d$ X+ K4 T
select  cc.contactpersonid,   cc.clientcontactid,   ad.city,   ad.addressidfrom SavedList slinner join ClientContacts cc on cc.ContactPersonId = sl.ObjectIdinner join Clients c on c.ClientID = cc.ClientIdinner join Address ad on c.ClientID = ad.ObjectIdwhere sl.SavedListId = 2117结果:. z$ M- m* ^# _% e2 @' C$ Y
contactpersonid clientcontactid city    addressid                                                                                                                                                                                                                                                                                                                                                                                 141414141414141451451451451451451451451451451451451451451888888888888888888888888888888888888888888888788787878787878787878787873487348734834London  1130705878788                                                                                                                                                                                                                                                                                                                                                                                                                                              Leeds   145368我需要联系客户 21901    返回这些结果 之一    ,优先考虑的是城市所在的那个。我试着选择 top(1),2 h! o1 _1 ^5 s2 w8 e# ?; b
但我认为这归因于迫使多个记录返回的连接。我非常感谢如何只返回一个结果以及如何控制结果的任何帮助!
1 t' D* u: s8 `, f% K$ m# h1 P8 W谢谢
) {& O8 B% [9 H- r                                                                5 J4 P7 T, l+ @' n" }# @* u! j% b$ W
    解决方案:                                                               
" ^- C' E' a7 @                                                                尝试:& m2 K; k( O& ]
;WITH a AS (select  cc.contactpersonid,   cc.clientcontactid,   ad.city,   ad.addressid,   ROW_NUMBER() OVER (PARTITION BY cc.clientcontactid ORDER BY ad.city DESC) AS RowNum    from SavedList sl    inner join ClientContacts cc on cc.ContactPersonId = sl.ObjectId    inner join Clients c on c.ClientID = cc.ClientId    inner join Address ad on c.ClientID = ad.ObjectId    where sl.SavedListId = 2117)SELECT  *FROM    aWHERE   RowNum =
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则