日期:2014-05-18  浏览次数:20581 次

重分求SQL语句!!!!!!!!!!!!!!!!!!!!
我有个树状图,  
节点数据库的字段   分为   code(代码)   ,level(层次),   upcode(父节点代码)

比如
code             level       upcode
01                       1             null
0101                   2               01
02                       1             null
0201                   2               02
0202                   2               02
020203               3               0202
...

我现在用一个SQL语句得到每个节点的第1层次的父节点代码
比如按照上面数据得到
code               firstupcode
01                   01
0101               01
02                   02
0201               02
0202               02
020203           02
不要用   left(code,2)因为可能节点代码不是这样按照规矩的

------解决方案--------------------
对不起,没看到你要递归,恐怕要写存储过程了.

要不然你就要一百几十张表自关联
------解决方案--------------------
set nocount on
declare @a table(code varchar(10), level int, upcode varchar(20),firstdot varchar(10),levelx int)
insert @a select '01 ', 1 , null,null,null
union all select '0101 ', 2 , '01 ',null,null
union all select '02 ', 1 ,null,null,null
union all select '0201 ', 2 , '02 ',null,null
union all select '0202 ', 2 , '02 ',null,null
union all select '020203 ', 3 , '0202 ',null,null
union all select '02020304 ', 4 , '020203 ',null,null

declare @i int
select @I=max(level) from @a

update @a set upcode=code where upcode is null
update @a set levelx=level,firstdot=upcode

while @i> 0
begin
update a set firstdot=b.firstdot,levelx=@i-1 from @a a ,@a b where a.firstdot=b.code and a.levelx=@I
set @i=@i-1
end

select * from @a