取得一级类别,二级类别

luyesql 2008-05-22 09:19:39
表结构
编号 类别名称 父类 路径
bh kz01 kz02 kz03
1 一级名称 0 0
2 二级名称 1 0,1
3 三级名称 2 0,2
现在想显示成如下
bh kz01 kz02 kz03 first second third
1 一级名称 0 0 NULL NULL NULL
2 二级名称 1 0,1 一级名称 NULL NULL
3 三级名称 2 0,2 一级名称 二级名称 NULL


该如何写呢?


...全文
129 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChinaJiaBing 2008-05-22
  • 打赏
  • 举报
回复
建一个主表分主目录,再建一个子表放子目录。对应相对的主目录。用id连接。
Herb2 2008-05-22
  • 打赏
  • 举报
回复

/******************************************************************************/
/*回复:20080522001总:00043 */
/*主题:路径名称 */
/*作者:二等草 */
/******************************************************************************/

set nocount on

--数据--------------------------------------------------------------------------

create table [tb] ([bh] int,[kz01] varchar(8),[kz02] int,[kz03] varchar(10))
insert into [tb] select 1,'一级名称',0,'0'
insert into [tb] select 2,'二级名称',1,'0,1'
insert into [tb] select 3,'三级名称',2,'0,1,2'
go

--代码--------------------------------------------------------------------------
create function getn(@d varchar(10),@i int)
returns varchar(10)
as
begin
declare @j int,@s varchar(10)
if charindex(',',@d) = 0 return NULL
select @d = @d+',',@j = 1
while @j <= @i and @d <> ''
begin
select @d = right(@d,len(@d)-charindex(',',@d))
set @j = @j + 1
end
if @d ='' return null
set @d = left(@d,charindex(',',@d)-1)
select @s = kz01 from tb where bh = @d
return @s
end
go
select bh,kz01,kz02,kz03
,first = dbo.getn(kz03,1)
,second = dbo.getn(kz03,2)
,third = dbo.getn(kz03,3)

from tb a
go

/*结果--------------------------------------------------------------------------
bh kz01 kz02 kz03 first second third
----------- -------- ----------- ---------- ---------- ---------- ----------
1 一级名称 0 0 NULL NULL NULL
2 二级名称 1 0,1 一级名称 NULL NULL
3 三级名称 2 0,1,2 一级名称 二级名称 NULL

--清除------------------------------------------------------------------------*/
drop function getn
go
drop table tb
luyesql 2008-05-22
  • 打赏
  • 举报
回复
恩,好的.谢谢昨夜小楼
Limpire 2008-05-22
  • 打赏
  • 举报
回复
象路径那样,返回各名称路径就行了,你这样很难搞的
luyesql 2008-05-22
  • 打赏
  • 举报
回复
更改一下
表结构 是这样子的
编号 类别名称 父类 路径
bh kz01 kz02 kz03
1 一级名称 0 0
2 二级名称 1 0,1
3 三级名称 2 0,1,2
luyesql 2008-05-22
  • 打赏
  • 举报
回复
我只要三级就可以了,其它级不要
Limpire 2008-05-22
  • 打赏
  • 举报
回复
无限级呢,有多少个字段够你放?

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧