在两列中按重复项排序



我有一个名字和电话号码的列表。两列都有重复

使用以下代码,我按电话对表进行排序,但如果有任何名称重复,则将它们聚集在一起:
SELECT 
a.[name], 
a.phone
FROM 
Tests.dbo.sort_test6 AS a
JOIN 
(
SELECT 
[name], 
MIN(phone) AS min_phone_by_name
FROM 
Tests.dbo.sort_test6 
GROUP BY 
[name]
) AS dt
ON a.[name] = dt.[name]
ORDER BY min_phone_by_name, [name], phone

结果非常好;这些都是按照phone的顺序排列的,但是如果有任何重复的名字是聚集在一起的:

<表类>名称手机tbody><<tr>前夕098前夕365前夕789Nack098亚当123亚当345亚当346Oiu145汤姆145网卡146詹姆斯156山姆177山姆443山姆777蒂姆256256莎拉333Dav345

有几种方法可以做到这一点。以下是我对这个问题的看法。此外,你还有"大卫"。根据你的解释,在你想要的输出中的错误位置。

with SortedResults as
(
select *
, RowNum = ROW_NUMBER() over (partition by name order by phone)
from SortDemo
)
select sd.name
, sd.phone
from SortedResults sr
join SortDemo sd on sd.name = sr.name
where sr.RowNum = 1
order by sr.phone
, sd.name

最新更新