有两个表
单位表:
单位ID  单位名称  ParentID
1        AAA         0
2        BBB         1
3        CCC         1
4        DDD         1
5        EEE         2
...      ...         ...与用户表
用户ID    用户名     用户单位ID
1          XXX        3
2          YYY        4
3          ZZZ        5
4          MMM        3
...        ...        ...希望能生成树如下:
AAA
|-----BBB
       |------EEE
|             |----ZZZ
|-----CCC
       |---XXX
       |---MMM
|-----DDD
       |---YYY即将用户根据用户的单位ID添加到单位树中,形成用户树.

解决方案 »

  1.   

    declare @ta table(单位ID int,  单位名称 varchar(5), ParentID int)
    insert @ta select 1,        'AAA',         0
    insert @ta select 2,        'BBB',         1
    insert @ta select 3,        'CCC',         1
    insert @ta select 4,        'DDD',         1
    insert @ta select 5,        'EEE',         2select space(parentid*5)+单位名称 from @ta(1 行受影响)(1 行受影响)(1 行受影响)(1 行受影响)(1 行受影响)----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    AAA
         BBB
         CCC
         DDD
              EEE(5 行受影响)
      

  2.   

    declare @ta table(单位ID int,  单位名称 varchar(5), ParentID int)
    insert @ta select 1,        'AAA',         0
    insert @ta select 2,        'BBB',         1
    insert @ta select 3,        'CCC',         1
    insert @ta select 4,        'DDD',         1
    insert @ta select 5,        'EEE',         2
    declare @tb table(用户ID int,   用户名  varchar(5),   用户单位ID int)
    insert @tb select 1,          'XXX',        3
    insert @tb select 2,          'YYY',        4
    insert @tb select 3,          'ZZZ',        5
    insert @tb select 4,          'MMM',        3
    select [显示]=
    case when 用户名 is null then space(ParentID*5)+单位名称
    else space(ParentID*用户单位ID)+单位名称+char(10)+space(ParentID*用户单位ID+len(单位名称))+用户名 end
    from @ta a left join @tb b 
    on a.单位ID=b.用户单位ID
    order by isnull(用户单位ID,10)  desc显示
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    AAA
         BBB
              EEE
                 ZZZ
        DDD
           YYY
       CCC
          XXX
       CCC
          MMM(6 行受影响)
      

  3.   

    declare @ta table(单位ID int,  单位名称 varchar(5), ParentID int)
    insert @ta select 1,        'AAA',         0
    insert @ta select 2,        'BBB',         1
    insert @ta select 3,        'CCC',         1
    insert @ta select 4,        'DDD',         1
    insert @ta select 5,        'EEE',         2
    declare @tb table(用户ID int,   用户名  varchar(5),   用户单位ID int)
    insert @tb select 1,          'XXX',        3
    insert @tb select 2,          'YYY',        4
    insert @tb select 3,          'ZZZ',        5
    insert @tb select 4,          'MMM',        3
    select [显示]=
    case when min(用户名) is null then space(ParentID*5)+单位名称
    when count(*)=2 then space(ParentID*5)+单位名称+char(10)+space(ParentID*5+len(单位名称))+min(用户名)+
    char(10)+space(ParentID*5+len(单位名称))+max(用户名)
    else space(min(ParentID)*min(用户单位ID))+min(单位名称)+char(10)+space(min(ParentID)*min(用户单位ID)+len(min(单位名称)))+min(用户名) end
    from @ta a left join @tb b 
    on a.单位ID=b.用户单位ID
    group by 单位名称,ParentID
    order by isnull(min(用户单位ID),10)  desc显示
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    AAA
         BBB
              EEE
                 ZZZ
        DDD
           YYY
         CCC
            MMM
            XXX
    警告: 聚合或其他 SET 操作消除了空值。(5 行受影响)
      

  4.   

    查看如下:
    http://community.csdn.net/Expert/topic/5446/5446762.xml?temp=.6507685