我有以下数据集
Create table #table(
Message varchar(10),
ID varchar(5),
ParentID varchar(5))
Insert into #table
select 'Parent','123',''
UNION
select 'Child','234','123'
UNION
select 'Child','345','123'
UNION
select 'Child','145','123'
UNION
select 'Parent','333',''
UNION
select 'Child','567','333'
UNION
select 'Child','789','333'
UNION
select 'Child','100','333'
UNION
select 'Child','111','333'
select * from #table
当我选择数据时,数据看起来是随机的。但我想按以下顺序
Message ID ParentID
Parent 123
Child 234 123
Child 345 123
Child 145 123
Parent 333
Child 567 333
Child 789 333
Child 100 333
Child 111 333
我尝试使用行号,但对于以下序列它不起作用。 有人可以帮帮我吗 ?
答案 0 :(得分:1)
在CASE
中使用ORDER BY
语句,以下查询应执行您想要的操作:
select * from #table
order by case when Message = 'Parent' then ID else ParentID end, ParentID
答案 1 :(得分:0)
使用此:
select message,id,parentid
from #table
order by case when parentid = '' then convert(int,id)-1 else parentid end
此解决方案不基于消息列,并且将对所有数据集进行纠正。
答案 2 :(得分:0)
使用条件排序:
select * from #table
order by case when parentid = '' then id else parentid end, parentid
请参见demo。
结果:
> Message | ID | ParentID
> :------ | :-- | :-------
> Parent | 123 |
> Child | 145 | 123
> Child | 234 | 123
> Child | 345 | 123
> Parent | 333 |
> Child | 100 | 333
> Child | 111 | 333
> Child | 567 | 333
> Child | 789 | 333
如果父母在NULL
列中包含parentid
而不是''
,则必须将ORDER BY
子句更改为:
order by isnull(parentid, id), parentid