order by  公司,Store_no

解决方案 »

  1.   

    这个表的字段 是很多的,以上为了便于显示,我只写了几个关键字段,还把主键名称改了,完整的表是这样的CREATE TABLE [dbo].[Store_information] (
    [Store_information_id] [bigint] IDENTITY (1, 1) NOT NULL ,
    [Store_no] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [ParentID] [bigint] NULL ,
    [Store_sort] [int] NOT NULL ,
    [Store_name] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NOT NULL ,
    [Store_address] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NULL ,
    [Store_tel] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NULL ,
    [Store_owner] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NULL ,
    [Store_owner_address] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NULL ,
    [Store_owner_tel] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NULL ,
    [Store_owner_email] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NULL ,
    [Store_email] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NULL ,
    [Store_type] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [Store_fax] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NULL ,
    [Store_account] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NULL ,
    [Store_associate_time] [datetime] NULL ,
    [Inputdate] [datetime] NULL ,
    [Operator] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
    [Available] [int] NULL 
    ) ON [PRIMARY]
    GO
      

  2.   

    order by  case ParentID when -1 then  -PKid
                            else ParentID
              end,Store_no
      

  3.   

    order by  公司,Store_no
    ————
    这样是不行的,我需要父商店后紧跟着他的子商店,你这样做是会错开的
      

  4.   

    order by  case ParentID when -1 then  PKid
                            else ParentID
              end,Store_no
      

  5.   

    order by  case ParentID when -1 then  PKid
                            else ParentID
              end,
              case  ParentID when -1 then  0
                            else 1
              end,
              Store_no
      

  6.   

    多谢 lsxaa(小李铅笔刀),你这个可以解决一般情况,但是,当父商店与子商店出现树型结构时,也就是一个商店自己是甲的子商店,同时也是乙的父商店时 ,显示就不正常了~~~会错开掉~~~
      

  7.   

    写一个函数,求当前ID 的顶ID再写一个函数,求当前ID 所在的级别,然后再进行排序就行了
      

  8.   

    参见这个
    http://community.csdn.net/Expert/topic/3689/3689836.xml?temp=.7921411
      

  9.   

    --参照这个--示例数据         
    create table tb(ID int,Name varchar(10),ParentID int)
    insert tb select 1,'AAAA'    ,0
    union all select 2,'BBBB'    ,0
    union all select 3,'CCCC'    ,0
    union all select 4,'AAAA-1'  ,1
    union all select 5,'AAAA-2'  ,1
    union all select 6,'BBBB-1'  ,2
    union all select 7,'CCCC-1'  ,3
    union all select 8,'CCCC-2'  ,3
    union all select 9,'AAAA-1-1',4go
    declare @i int
    set @i=1
    create table #tmp(id int,px varchar(1000),parentid int)
    insert into  #tmp select [id], '', parentID from tb order by id update #tmp set px=cast(@i+10000000 as varchar) ,@i=@i+1
    from #tmp where parentid=0  
    while exists (select 1 from #tmp a join #tmp b 
    on a.id=b.parentID and a.px<>'' and b.px='')update b set b.px=a.px+cast(@i+10000000 as varchar),@i=@i+1
    from #tmp a join #tmp b 
    on a.id=b.parentID and a.px<>'' and b.px=''select  b.*,space(len(a.px)/2)+b.name 缩进的 from 
    #tmp a join tb b on a.id=b.id order by a.px drop table #tmp
    drop table tb所影响的行数为 1 行)ID          Name       ParentID    缩进的                                                                                                   
    ----------- ---------- ----------- ------------------------
    1           AAAA       0                AAAA
    4           AAAA-1     1                     AAAA-1
    9           AAAA-1-1   4                          AAAA-1-1
    5           AAAA-2     1                     AAAA-2
    2           BBBB       0                BBBB
    6           BBBB-1     2                     BBBB-1
    3           CCCC       0                CCCC
    7           CCCC-1     3                     CCCC-1
    8           CCCC-2     3                     CCCC-2(所影响的行数为 9 行)说明:1、树的深度不能超过5 2、
      

  10.   

    虽然一时还没看明白,但多谢各位了~~~THANKS