表
大类编码 小类编码 名称
0,1,苹果
0,2,梨子
1,1001,绿苹果
1,1002,小苹果
2,2001,雪梨
2,2002,鸭梨如果大类为0的可以不用考虑.如果存在子类.显示就不一样了
达到的效果
大类编码 小类编码 名称
0,1,苹果
0,2,梨子
1,1001,苹果--绿苹果
1,1002,苹果--小苹果
2,2001,梨子--雪梨
2,2002,梨子--鸭梨这样的效果一个查询能够搞定不?希望大家帮个忙.
大类编码 小类编码 名称
0,1,苹果
0,2,梨子
1,1001,绿苹果
1,1002,小苹果
2,2001,雪梨
2,2002,鸭梨如果大类为0的可以不用考虑.如果存在子类.显示就不一样了
达到的效果
大类编码 小类编码 名称
0,1,苹果
0,2,梨子
1,1001,苹果--绿苹果
1,1002,苹果--小苹果
2,2001,梨子--雪梨
2,2002,梨子--鸭梨这样的效果一个查询能够搞定不?希望大家帮个忙.
insert into tb values(0,1,'苹果')
insert into tb values(0,2,'梨子')
insert into tb values(1,1001,'绿苹果')
insert into tb values(1,1002,'小苹果')
insert into tb values(2,2001,'雪梨')
insert into tb values(2,2002,'鸭梨')
goselect * from tb where 大类编码 = 0
union all
select 大类编码,小类编码,(select 名称 from tb where 大类编码 = 0 and 小类编码 = t.大类编码) + '--' + 名称 from tb t where 大类编码 <> 0drop table tb /*
大类编码 小类编码 名称
----------- ----------- ----------------------
0 1 苹果
0 2 梨子
1 1001 苹果--绿苹果
1 1002 苹果--小苹果
2 2001 梨子--雪梨
2 2002 梨子--鸭梨(所影响的行数为 6 行)*/
insert into tb values(0,1,'苹果')
insert into tb values(0,2,'梨子')
insert into tb values(1,1001,'绿苹果')
insert into tb values(1,1002,'小苹果')
insert into tb values(2,2001,'雪梨')
insert into tb values(2,2002,'鸭梨')
goselect * from tb where 大类编码 = 0
union all
select 大类编码,小类编码,(select top 1 名称 from tb where 大类编码 = 0 and 小类编码 = t.大类编码) + '--' + 名称 from tb t where 大类编码 <> 0drop table tb /*
大类编码 小类编码 名称
----------- ----------- ----------------------
0 1 苹果
0 2 梨子
1 1001 苹果--绿苹果
1 1002 苹果--小苹果
2 2001 梨子--雪梨
2 2002 梨子--鸭梨(所影响的行数为 6 行)*/
也整个多级的出来吧~~
谢谢
insert into test
select 1,0,'学习总结' union
select 2,4,'鼠标事件' union
select 3,4,'tree' union
select 4,6,'swing' union
select 6,1,'java' union
select 7,1,'C++' union
select 9,6,'eclipse'
gocreate function f_getNum(@id int)
returns varchar(4000)
as
begin
declare @ret varchar(4000),@pid int
set @ret = right('0000'+rtrim(@id),4)
while exists(select 1 from test where id=@id and pid!=0)
begin
select @pid=pid from test where id=@id and pid!=0
set @id = @pid
set @ret = right('0000'+rtrim(@id),4)+@ret
end
return @ret
end
goselect REPLICATE('-',len(dbo.f_getNum(id))/4-1)+name as name from test order by dbo.f_getNum(id)
/*
name
----------
学习总结
-java
--swing
---鼠标事件
---tree
--eclipse
-C++
*/
godrop function f_getNum
drop table test
go
insert @a SELECT 0,1,'苹果'
union all SELECT 0,2,'梨子'
union all SELECT 1,1001,'绿苹果'
union all SELECT 1,1002,'小苹果'
union all SELECT 2,2001,'雪梨'
union all SELECT 2,2002,'鸭梨'SELECT a.大类编码,a.小类编码,coalesce(b.名称+'-'+a.名称,a.名称) 名称 FROM @a a left join @a b ON a.大类编码=b.小类编码--result
/*大类编码 小类编码 名称
----------- ----------- ---------------------
0 1 苹果
0 2 梨子
1 1001 苹果-绿苹果
1 1002 苹果-小苹果
2 2001 梨子-雪梨
2 2002 梨子-鸭梨(所影响的行数为 6 行)*/