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')

アイテム テーブルには、アイテムが属するカテゴリにリンクするフィールドがあります。私が達成しようとしているのは、アイテムを持つカテゴリ「ブランチ」のみを (レベルごとに) リストすることです。

今回は十分に明確であることを願っています。

ご協力いただきありがとうございます。

PS: スペイン語の記述子については申し訳ありませんが、アプリケーションはスペイン語です

4

3 に答える 3

0

Oracle では、CONNECT_BY_ROOT演算子を使用してルート要素のみを表示できます。DISTINCT外部クエリでも同様に使用する必要がある場合があります。

于 2012-05-17T15:01:18.913 に答える
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 に答える