如何让sql读出的数据按照指定规则排序

时间:2021-09-29 14:57:33
比如读出的数据中xiangguanid的数据是数据中的另外一条数据的id,那么就将这两条数据排序为1,2,2的xiangguanid又是另外一条数据,那么他排序为3
我的想法是用,case when then else end来做到,但是我还是没有找到有效的方法,请教各位了

7 个解决方案

#1


use Tempdb
go
--> --> 
 
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T(ID int,ParentID int)
Insert #T
select 1,0 union all
SELECT 2,1 union all
select 3,2 UNION ALL
SELECT 4,0 UNION ALL
SELECT 5,4

Go
;WITH a
as
(
SELECT *,ord=CAST(right(1000+ID,3) AS NVARCHAR(200)) FROM #T WHERE ParentID=0
UNION ALL
SELECT b.*,ord=CAST(a.ord+right(1000+b.ID,3) AS NVARCHAR(200)) FROM #T AS b INNER JOIN a ON a.ID=b.ParentID
)
SELECT ID,ParentID 
FROM a
ORDER BY ord
/*
ID ParentID
1 0
2 1
3 2
4 0
5 4
*/

#2


没有明白意思 。

#3


  来学习学习

#4


简单说就是:数据读出来的本身排序规则太简单,我需要层叠式的排序,这么说吧,这个帖子里面,我回复你的,那么我的帖子的数据记录下来你的帖子的id,然后又有人回复我,我需要这几个帖子成为一组数据,排序1,2,3,以此类推。如果有几个回复我的,那么他们的新排序号都是3,这些再按照时间排序。
这个排序方式是经过一个判断查找后得到的新排序规则。

#5


把各级id转为字符串后,前面加零,凑足到最大可能的ID长度,用递归找出各级此经过处理的id,拼接成一个字符串,以这个字符串排序.

#6


引用 5 楼 qianjin036a 的回复:
把各级id转为字符串后,前面加零,凑足到最大可能的ID长度,用递归找出各级此经过处理的id,拼接成一个字符串,以这个字符串排序.

比如,表中最大的ID如为5位,则用来排序的各级不同的ID可能如:
00001
000250000300125
0010000025

#7


实在抱歉,1楼给出的答案是正确和最切题的,可惜我结贴的时候没弄明白,对不起了

#1


use Tempdb
go
--> --> 
 
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T(ID int,ParentID int)
Insert #T
select 1,0 union all
SELECT 2,1 union all
select 3,2 UNION ALL
SELECT 4,0 UNION ALL
SELECT 5,4

Go
;WITH a
as
(
SELECT *,ord=CAST(right(1000+ID,3) AS NVARCHAR(200)) FROM #T WHERE ParentID=0
UNION ALL
SELECT b.*,ord=CAST(a.ord+right(1000+b.ID,3) AS NVARCHAR(200)) FROM #T AS b INNER JOIN a ON a.ID=b.ParentID
)
SELECT ID,ParentID 
FROM a
ORDER BY ord
/*
ID ParentID
1 0
2 1
3 2
4 0
5 4
*/

#2


没有明白意思 。

#3


  来学习学习

#4


简单说就是:数据读出来的本身排序规则太简单,我需要层叠式的排序,这么说吧,这个帖子里面,我回复你的,那么我的帖子的数据记录下来你的帖子的id,然后又有人回复我,我需要这几个帖子成为一组数据,排序1,2,3,以此类推。如果有几个回复我的,那么他们的新排序号都是3,这些再按照时间排序。
这个排序方式是经过一个判断查找后得到的新排序规则。

#5


把各级id转为字符串后,前面加零,凑足到最大可能的ID长度,用递归找出各级此经过处理的id,拼接成一个字符串,以这个字符串排序.

#6


引用 5 楼 qianjin036a 的回复:
把各级id转为字符串后,前面加零,凑足到最大可能的ID长度,用递归找出各级此经过处理的id,拼接成一个字符串,以这个字符串排序.

比如,表中最大的ID如为5位,则用来排序的各级不同的ID可能如:
00001
000250000300125
0010000025

#7


实在抱歉,1楼给出的答案是正确和最切题的,可惜我结贴的时候没弄明白,对不起了