0

我正在尝试检查特定 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 表有一个字段链接到该项目所属的类别。我想要实现的是(按级别)仅列出具有项目的类别“分支”。

我希望这次足够清楚。

谢谢你的帮助。

PS:请原谅我关于西班牙语描述符,但应用程序是西班牙语的

4

3 回答 3

0

根据您的示例,以下方法可以解决问题:

Select left(category, 3)
 From categoryTree
Where right(category, 2) in ('17', '23')

我会使用 like 或 charindex 使这个更通用,但我在我的 iPhone 上。输入代码很痛苦。

于 2012-05-17T18:31:39.453 回答
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
于 2012-05-17T17:21:42.873 回答
0

在 Oracle 中,您可以使用CONNECT_BY_ROOT运算符仅显示根元素。您可能还需要DISTINCT在外部查询中使用。

于 2012-05-17T15:01:18.913 回答