我一直在尝试根据下面的重复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
有什么建议吗?谢谢!
答案 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,因为它可能会产生误导,因为它实际上并不是存储记录的唯一标识符。