CatId CatName ParentId
2 产品专区 0
5 精美饰品 2
6 女性用品 2
7 精致礼品 2
8 日常用品 2
33 头饰 5
10 手表 5
11 挂件 5
14 彩妆 6
15 护肤 6
19 玩具 7
20 动漫 7
21 桌游 7
25 数码配件 8
26 手提包 8
27 皮夹 8需求:如果CatId=33,则显示:产品专区 -> 精美饰品 -> 头饰
如果CatId=7,则显示:产品专区 -> 精致礼品
如果CatId=2,则显示:产品专区要用递归的,因为是无限极分类,谢谢。
2 产品专区 0
5 精美饰品 2
6 女性用品 2
7 精致礼品 2
8 日常用品 2
33 头饰 5
10 手表 5
11 挂件 5
14 彩妆 6
15 护肤 6
19 玩具 7
20 动漫 7
21 桌游 7
25 数码配件 8
26 手提包 8
27 皮夹 8需求:如果CatId=33,则显示:产品专区 -> 精美饰品 -> 头饰
如果CatId=7,则显示:产品专区 -> 精致礼品
如果CatId=2,则显示:产品专区要用递归的,因为是无限极分类,谢谢。
-- Author :DBA_Huangzj(發糞塗牆)
-- Date :2013-01-16 23:09:20
-- Version:
-- Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (Intel X86)
-- Jun 17 2011 00:57:23
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go
create table [huang]([CatId] int,[CatName] varchar(8),[ParentId] int)
insert [huang]
select 2,'产品专区',0 union all
select 5,'精美饰品',2 union all
select 6,'女性用品',2 union all
select 7,'精致礼品',2 union all
select 8,'日常用品',2 union all
select 33,'头饰',5 union all
select 10,'手表',5 union all
select 11,'挂件',5 union all
select 14,'彩妆',6 union all
select 15,'护肤',6 union all
select 19,'玩具',7 union all
select 20,'动漫',7 union all
select 21,'桌游',7 union all
select 25,'数码配件',8 union all
select 26,'手提包',8 union all
select 27,'皮夹',8
--------------开始查询--------------------------
--SELECT * FROM huang
DECLARE @CatId INT
SET @CatId=33
;WITH cte AS (
select * from [huang]
WHERE catid=@CatId
UNION ALL
SELECT b.catid,b.catname,b.parentid
FROM cte a INNER JOIN huang b ON a.parentid=b.catid)
select DISTINCT
stuff((select '-'+[CatName] FROM cte b
for xml path('')),1,1,'') '[CatName]'
from cte
----------------结果----------------------------
/*
[CatName]
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
头饰-精美饰品-产品专区(1 行受影响)
*/