我正在尝试检查特定ID是否可以位于层次结构中。
我有一个以分层方式存储的类别列表。 实施例
(0x, 0, 1, 'root'),
(0x58, 1, 2, 'Market Zone'),
(0x5AC0, 2, 3, 'Informática'),
(0x5AD6, 3, 8, 'Accesorios Robótica'),
(0x5ADA, 3, 9, 'Accesorios Eléctricos'),
(0x5ADE, 3, 10, 'Equipos'),
(0x5ADEB0, 4, 12, 'Portátiles'),
(0x5ADED0, 4, 11, 'Accesorios Portátil'),
(0x5ADEF0, 4, 13, 'Máquinas de Oficina'),
(0x5ADF08, 4, 14, 'PC y TPV'),
(0x5ADF18, 4, 15, 'Accesorios PC y TPV'),
(0x5ADF28, 4, 16, 'Servidores'),
(0x5AE1, 3, 17, 'Iluminación'),
(0x5AE3, 3, 18, 'Periféricos - Informática'),
(0x5AE358, 4, 41, 'Cajas Externas')
items表有一个链接到该项所属类别的字段。我想要实现的是(仅按级别)列出具有项目的“分支”类别。
我希望这次显而易见。
感谢您的帮助。
P.S。:关于西班牙语描述符,请给我说,但应用程序是西班牙语
答案 0 :(得分:0)
在Oracle中,您可以使用CONNECT_BY_ROOT
运算符仅显示根元素。您可能还需要在外部查询中使用DISTINCT
。
答案 1 :(得分:0)
尝试:
DECLARE @CategoryId INT
SET @CategoryId = 23;
WITH Category_CTE (CategoryId, ParentId, Lvl) AS
(
SELECT CategoryId, ParentId, 1 lvl
FROM Category
WHERE CategoryId = @CategoryId
UNION ALL
SELECT c.CategoryId, c.ParentId, Lvl+1 lvl
FROM Category c
INNER JOIN Category_CTE cte ON cte.ParentId = c.CategoryId
)
SELECT *
FROM Category_CTE
ORDER BY Lvl DESC
以上查询将返回结果:
CategoryId ParentId Lvl
----------- ----------- -----------
0 NULL 4
2 0 3
21 2 2
23 21 1
类别表数据:
CategoryId ParentId CategoryName
----------- ----------- ------------
0 NULL Category 1
1 0 Category 2
12 1 Category 3
13 1 Category 4
2 0 NULL
21 2 NULL
23 21 NULL
答案 2 :(得分:0)
根据你的例子,以下是诀窍:
Select left(category, 3)
From categoryTree
Where right(category, 2) in ('17', '23')
我会使用like或charindex使这更通用,但我在我的iPhone上。输入代码很痛苦。