本帖最后由 mcluzhi 于 2014-04-22 10:45:43 编辑

解决方案 »

  1.   

    反正是拿来做操作的
    先查出父级菜单,order by id 然后根据id查子级id 
      

  2.   

    TAG  ID   Name       Kind
    ---- ---- ---------- ----
    1    1    手机         0
    1    3    IPHONE     1
    1    4    HTC        1
    1    5    小米         1
    2    2    电脑         0
    2    6    Apple      2
    2    7    华硕         2
    2    8    三星         2(8 行受影响)
    DECLARE @KIND VARCHAR='0'
    SELECT * FROM 
    (SELECT A.ID AS TAG,B.* FROM 
    (SELECT * FROM tb_inc WHERE Kind=@KIND) A
    JOIN tb_inc B ON A.ID=B.Kind 
    UNION ALL 
    SELECT ID AS TAG,* FROM tb_inc WHERE Kind=@KIND ) C
    GROUP BY C.TAG,C.ID,C.Kind,C.Name
      

  3.   

    可以使用游标。
    create table tempTable(
      Id int,
      Name varchar(20),
      Kind int
    )
    insert tempTable(Id,Name,Kind)
    select '1','手机',0 union
    select '2','电脑',0 union
    select '3','IPHONE',1 union
    select '4','华硕',2 union
    select '5','HTC',1create table tempTable1(
      Id int,
      Name varchar(20),
      Kind int
    )
    declare @parentId int
    -- 定义游标
    declare p_cursor cursor for select distinct id from tempTable where Kind=0
    open p_cursor
    fetch next from p_cursor into @parentId
    while @@FETCH_STATUS = 0
    begin
    -- 插入父节点
    insert tempTable1(Id,Name,Kind)
    select * from tempTable where Id = @parentId
    -- 插入孩子节点
    insert tempTable1(Id,Name,Kind)
    select * from tempTable where Kind = @parentIdfetch next from p_cursor into @parentId
    end
    close p_cursor  -- 循环完毕 ,关闭游标
    DEALLOCATE p_cursor select * from tempTable1
    drop table tempTable
    drop table tempTable1
      

  4.   

    应该没有办法直接读到如果是这样的话倒是可以一条语句搞定  ID        Name        Kind  ro
      1         手机          0          0,1
      2         电脑          0          0,2
      3        IPHONE         1     0,1,3
      4          HTC          1         0,1,4
      5         小米          1          0,1,5
      6         Apple         2         0,2,6
      7         华硕          2           0,2,7
      8         三星          2           0,2,8
      

  5.   

    select * from (select *,(case when kind=0 then [id] else kind end) as tag from temptb) as tab order by tag,kind
    1 手机 0 1
    3 IPHONE 1 1
    5 HTC 1 1
    2 电脑 0 2
    4 华硕 2 2
      

  6.   

    这样设置表结构,觉得怪怪的!SQL Server查询语句大全
    二、三楼正解!学习了。
      

  7.   

    我觉得上面的方法都比较麻烦,我的思路就是给表加一个排序列,这个列可以根据ID和Kind生成,然后按这个列排序:
    1. Kind=0表示的是一级栏目,那么用他的ID*10000 作为这个排序列的值,那么手机是10000,电脑是20000.
    2. Kind》0,用他的Kind*10000 +ID 作为这个排序列的值, 比如HTC 1*10000+4 =10004,这样它自然就排到手机下面了看代码:select ID,Name,Kind
    from
    (
    select   ID,Name,Kind,ID*10000 as orderbyID from T where Kind=0
    union 
    select    ID,Name,Kind, Kind*10000 + ID as orderbyID from T where not Kind=0
    ) as  TA
    order by orderbyID