试试这个select row_number() over (order by LEN(sequencename) desc)+1 as no,sequencename from ( select Initevent+'_'+Funcevent1 as SEQUENCENAME from Cal_Eventlist_tb where Initevent='LDDD' and model='15212b8fba4a40fea910c3414b1e611d' union select Initevent+'_'+Funcevent1+'_'+Funcevent2 as SEQUENCENAME from Cal_Eventlist_tb where Funcevent2 is not null and Funcevent2!='' and Initevent='LDDD' and model='15212b8fba4a40fea910c3414b1e611d' union select Initevent+'_'+Funcevent1+'_'+Funcevent2+'_'+Funcevent3 as SEQUENCENAME from Cal_Eventlist_tb where Funcevent2 is not null and Funcevent2!='' and Funcevent3 is not null and Funcevent3!='' and Initevent='LDDD' and model='15212b8fba4a40fea910c3414b1e611d' union select replace(sequencename,' | ','_') as SEQUENCENAME from Cal_Eventlist_tb where Initevent='LDDD' and model='15212b8fba4a40fea910c3414b1e611d') tb order by sequencename desc
select Initevent+'_'+Funcevent1 as SEQUENCENAME from Cal_Eventlist_tb where Initevent='LDDD' and model='15212b8fba4a40fea910c3414b1e611d' union
select Initevent+'_'+Funcevent1+'_'+Funcevent2 as SEQUENCENAME from Cal_Eventlist_tb where Funcevent2 is not null and Funcevent2!='' and Initevent='LDDD' and model='15212b8fba4a40fea910c3414b1e611d' union
select Initevent+'_'+Funcevent1+'_'+Funcevent2+'_'+Funcevent3 as SEQUENCENAME from Cal_Eventlist_tb where Funcevent2 is not null and Funcevent2!='' and Funcevent3 is not null and Funcevent3!='' and Initevent='LDDD' and model='15212b8fba4a40fea910c3414b1e611d' union
select replace(sequencename,' | ','_') as SEQUENCENAME from Cal_Eventlist_tb where Initevent='LDDD' and model='15212b8fba4a40fea910c3414b1e611d') tb order by sequencename desc
这个不行,可能我说的不明白,再说清楚点。就是 首先必须按照SEQUENCENAME 字段降序排列,得到的结果如图:现在可以把前6条数据看成一组,后6条数据看成一组,我现在就是想要在每组里面SEQUENCENAME 长度最短的放在最前面,其他的顺序不变,希望得到的结果如图: