为重复的ID号排序行

时间:2015-05-20 12:48:36

标签: sql sql-server

我一直在尝试根据下面的重复ID号找到排序行的方法,但一直没有成功。

ID       SortOrder       PersonID
1        0               100
2        1               100
3        0               200
4        0               200
5        1               200

我正在尝试对sortOrder列进行排序,因此数字1将显示在每个PersonID的顶部。所以最终结果如下:

ID       SortOrder       PersonID
1        1               100
2        0               100
3        1               200
4        0               200
5        0               200

有什么建议吗?谢谢!

3 个答案:

答案 0 :(得分:1)

您可以像这样使用CASE

ORDER BY PersonID,CASE WHEN SortOrder = 1 THEN 1 ELSE 2 END

如果您想要更改CASE之后的SortOrder = 1后续行的排名方式,您可以相应地更改PersonID

ORDER BY PersonID,CASE SortOrder WHEN 1 THEN 1 WHEN 0 THEN 2 ELSE 3 END

答案 1 :(得分:1)

另一个解决方案:

select id,SortOrder,PersonId from 
(select id,SortOrder,PersonId,row_number() over (partition by PersonId order by SortOrder desc) as rn from table) A
order by A.rn asc

答案 2 :(得分:0)

根据您希望ID值保持不变的评论,您可能会寻找以下内容:

Select  Row_Number() Over (Order By PersonID Asc, SortOrder Desc) As ID,
        SortOrder,
        PersonID
From    YourTable
Order By PersonID Asc, SortOrder Desc

但是,我要注意不要命名ROW_NUMBER字段ID,因为它可能会产生误导,因为它实际上并不是存储记录的唯一标识符。