我觉得你排序之前应该要整个对应的顺序,然后再排序,不然默认按照你安装的sqlserver排序规则来排序了,所以结果不是你想要的

解决方案 »

  1.   

    试试这个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
      

  2.   


    这个不行,可能我说的不明白,再说清楚点。就是  首先必须按照SEQUENCENAME 字段降序排列,得到的结果如图:现在可以把前6条数据看成一组,后6条数据看成一组,我现在就是想要在每组里面SEQUENCENAME 长度最短的放在最前面,其他的顺序不变,希望得到的结果如图:
      

  3.   

    你这个不好排序,sqlserver没那么智能,我建议,如果你的数据里面,每类只有6行,那么建一个参照表,把顺序先拍好,比如h2为1,h2_srv02为2这样,select出来之后与参照表关联排序