二级分类查询的问题

weishaolin131083 2006-05-12 02:23:34
有个产品分类表,如:

id 类别 所属类别
-----------------------------
38 路由器 0
182 其他网络设备 0
186 网络设备1 182
176 路由器3 38
180 路由器2 38
181 交换机 0
183 交换机1 181
187 网络设备2 182
179 路由器1 38
188 网络设备3 182
184 交换机2 181
185 交换机3 181

我要显示的结果为:

一级类别 二级类别
-------------------------
路由器 ...
... 路由器1
... 路由器2
... 路由器3
交换机 ...
... 交换机1
... 交换机2
... 交换机3
其他网络设备 ...
... 网络设备1
... 网络设备2
... 网络设备3


大家说说该怎么写这条SQL语句呢?
我的写法是:

select
[id],
case [所属类别] when 0 then [产品类别] else '...' end as [一级类别],
case [所属类别] when 0 then '...' else [产品类别] end as [二级类别]
from [产品类别] t
order by
CASE [所属类别] WHEN 0 THEN [id]*1000 ELSE [所属类别]*1000+1 END,[产品类别]

但我总觉的上面的SQL语句不好,大家帮我看看是什么地方不好,
或者大家帮我想个好点的方法,我先谢谢大家哦!
...全文
163 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
weishaolin131083 2006-05-12
  • 打赏
  • 举报
回复
谢谢 libin_ftsafe(子陌红尘)
子陌红尘 2006-05-12
  • 打赏
  • 举报
回复
declare @t table(id int,类别 varchar(20),所属类别 int)
insert into @t select 38 ,'路由器 ',0
insert into @t select 182,'其他网络设备',0
insert into @t select 186,'网络设备1 ',182
insert into @t select 176,'路由器3 ',38
insert into @t select 180,'路由器2 ',38
insert into @t select 181,'交换机 ',0
insert into @t select 183,'交换机1 ',181
insert into @t select 187,'网络设备2 ',182
insert into @t select 179,'路由器1 ',38
insert into @t select 188,'网络设备3 ',182
insert into @t select 184,'交换机2 ',181
insert into @t select 185,'交换机3 ',181

select
[id],
case [所属类别] when 0 then [类别] else '...' end as [一级类别],
case [所属类别] when 0 then '...' else [类别] end as [二级类别]
from @t t
order by
CASE [所属类别] WHEN 0 THEN id ELSE 所属类别 END,所属类别,类别

/*
id 一级类别 二级类别
----------- -------------------- --------------------
38 路由器 ...
179 ... 路由器1
180 ... 路由器2
176 ... 路由器3
181 交换机 ...
183 ... 交换机1
184 ... 交换机2
185 ... 交换机3
182 其他网络设备 ...
186 ... 网络设备1
187 ... 网络设备2
188 ... 网络设备3
*/
简介: 1、多级目录,每个目录下面可以有更深一级目录,并列出属于该目录的网站 管理:选择分类管理,添加需要的分类,或者选择下一级目录,同时可以选择删除(删)修改(修)制作(制)某一个目录 2、静态页面,所有目录页面均使用程序生成了html页,不用读取数据库,大大节省了服务器资源 管理:选择制作下属页面,系统会列出搜索的类别,请选择需要生成的类别 3、目录模版,在数据库中存放了大量的页面模版,每一个目录都可以订制自己的网面 管理:选择模板管理,系统会列出目前已经存在的模板,你可以修改,添加,删除,添加时请按照示例进行制作,建议先将数据库备份再修改 4、即时登陆网站,站长可以随时登陆自己的网站,但是登陆以后只能在他选定的目录所显示的页面中的“更多”网站页面中显示出来,只有在管理员审查并生成页面以后才能直接在目录页面看到 5、模糊查找, 6、布尔查找,支持and(*) or(|) not(-)等布尔表达式 例如:烟台*一百-新闻 或者:烟台 and 一百 not 新闻 如果只需要and连接,可以只输入 烟台 一百,这与 烟台*一百、烟台 and 一百 效果等同 搜索结果将会把相关关键词以特殊的颜色显示出来 7、常用关键词页面自动生成,用户输入查找的关键词都保存在数据库中,如果有相同的关键词则这些关键词数量累加,管理员管理的时候可以生成排名在头几位的关键词页面,也就是提前替用户把这些关键词提前搜索出来了,并且生成了静态的html页面,用户在搜索这些关键词时,就可以直接显示这些已经生成的页面,避免了大量的查询数据库,节省了服务器资源 管理:选择关键词管理,系统会列出数据库中已经存在的可以生成的关键词,以及网友在使用这个搜索引擎时用的关键字(只选取排名头100个),管理员可以随意生成需要的关键词页面 8、网站顺序,在某个目录下的网站数目很多的时候,排在上面的网站被访问的几率比排在下面的网站几率要大得多,因此我又增加排名功能,管理员可以设定某个网站在该目录下的排名 9、单目录搜索,当用户在某个目录浏览的时候,可以选择在该目录下搜索和搜索全部目录,选择在该目录下搜索可以只搜索属于该目录以及该目录的子目录下的网站 10、静态页面在线生成,在管理界面可以在线生成所有目录下的页面以及关键词页面 11、二次搜索功能,当用户在搜索某个关键词以后,系统列出了〉20个结果以后,就会出现二次搜索界面,用户可以选择在这些结果中再次搜索,比如要求结果必须不包含某个关键词或者必须再包含某个关键词 12、模版的在线修改,不同的页面模版有不同的规则 14、所有目录在线动态修改,自动更新以前的页面 15、动态生成网站首页(需要模版支持) 16、分类参照:指一个分类类目名分在一个上级类目下,而在另一个类目下作参照。以@作后缀的类目名。

34,593

社区成员

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

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