--表如下 :
--基本结构说明下。  
--FLevel 是多少 FNumber 前面就有多少个空格。
--FGroupNumber 相同即为同一类。 就是要同一类的进行排序,但显示 要把前面相同的都排在前面。具体看下面想要的结果
Create Table #tmp_Test (FNumber varchar(100),FGroupNumber varchar(50),FLevel int)
Insert into #tmp_Test values ('01','01',0)
Insert into #tmp_Test values ('02','02',0)
Insert into #tmp_Test values ('  03.02','03',2)
Insert into #tmp_Test values ('03','03',0)
Insert into #tmp_Test values (' 01','01',1)
Insert into #tmp_Test values ('  01.01','01',2)
Insert into #tmp_Test values ('   01.01.01','01',3)
Insert into #tmp_Test values ('    01.01.01.01','01',4)
Insert into #tmp_Test values ('  01.02','01',2)
Insert into #tmp_Test values ('    02.01.01.01','02',4)
Insert into #tmp_Test values ('    01.02.01.01','01',4)
Insert into #tmp_Test values ('   01.02.03','01',3)
Insert into #tmp_Test values ('  01.03','01',2)
Insert into #tmp_Test values ('   01.02.04','01',3)
/*相要结果 如下表
FNumber FGroupNumber FLevel 
--------------------------------------------------------
01 01 0
 01 01 1
  01.01 01 2
   01.01.01 01 3
    01.01.01.01 01 4
  01.02 01 2
    01.02.01.01 01 4
   01.02.03 01 3
   01.02.04 01 3
  01.03 01 2
02 02 0
    02.01.01.01 02 4
03 03 0
  03.02 03 2*/
drop table #tmp_Test

解决方案 »

  1.   


    select Fnumber=space(flevel)+fnumber,fgroupnumber,flevel from #tmp_test
    order by FGroupNumber
      

  2.   

    楼上的不太对。02 02 0
        02.01.01.01 02 4
    02 的应该要到 02组里啊。可 上面的SQL 就 把         02.01.01.01 放到 01 组里了
      

  3.   

    SELECT *
    FROM #tmp_Test
    ORDER BY FGroupNumber,LTRIM(FNumber)
      

  4.   

    select * from #tmp_test order by FGroupNumber,ltrim(Fnumber)
      

  5.   

    SELECT *
    FROM #tmp_Test
    ORDER BY Replace(FNumber,' ',''),FGroupNumber