有两个表
单位表:
单位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添加到单位树中,形成用户树.
单位表:
单位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添加到单位树中,形成用户树.
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 行受影响)
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 行受影响)
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 行受影响)
http://community.csdn.net/Expert/topic/5446/5446762.xml?temp=.6507685