Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Hierarchy Id, представление в TreeView, hasChild?  [new]
Aitov
Member

Откуда:
Сообщений: 13
Так уж получилось, но БД на 2008r2, используется HierarchyId
Строим дерево на jstree
вот например запрос
select
S.Hid,
S.KeyName
from Structure S
where S.Hid.GetAncestor(1) = 0x5A52B0
выдает на ура все дочерние узлы узла 0x5A52B0
а я вот хочу узнать, есть ли у выданных узлов в свою очередь дочерние, ну чтобы плюсик рисовать или нет на узле()
После долгих попыток, чтений и гуглений засомневался, а можно ли это сделать правильно и красиво((((
Неужели в ms забыли добавить метод GetDescendant(Hid)
26 июл 11, 18:54    [11030384]     Ответить | Цитировать Сообщить модератору
 Re: Hierarchy Id, представление в TreeView, hasChild?  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 726
Aitov,
тут фотография вобще-то нужна (чтобы по ней лечить)
Может подойдет:
1. Найти всех детей для Вашего нода
2. Для результата от шага 1 найти всех детей
3. LEFT OUTER JOIN to step1
WHERE key.step2 IS NULL
AND step2.NodeID != step1.NodeID
доработать топором
26 июл 11, 19:40    [11030573]     Ответить | Цитировать Сообщить модератору
 Re: Hierarchy Id, представление в TreeView, hasChild?  [new]
Aitov
Member

Откуда:
Сообщений: 13
kapelan,

фотография есть, я когда брал hierarchyId, не хотел топором((((
а хотел налету когда получаю список потомков для узла, получить еще столбик с ноликами и единичками(((
нолик нет потомков, единички - есть(((
а Вы - Join, доработать((( там же столько методов...и получить предка заданной глубины вверх, и получить первого свободного потомка.... а узнать, есть ли потомок неужели нельзя(
26 июл 11, 20:23    [11030664]     Ответить | Цитировать Сообщить модератору
 Re: Hierarchy Id, представление в TreeView, hasChild?  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 726
Aitov
kapelan,
.... а узнать, есть ли потомок неужели нельзя(

ну третий шаг как раз и даст Вам нолик если потомков нету
26 июл 11, 20:53    [11030737]     Ответить | Цитировать Сообщить модератору
 Re: Hierarchy Id, представление в TreeView, hasChild?  [new]
Aitov
Member

Откуда:
Сообщений: 13
То-есть первый результат во временную таблицу и к ней Join потом()?
а можно по эффективнее((? или я туплю()?
26 июл 11, 21:10    [11030784]     Ответить | Цитировать Сообщить модератору
 Re: Hierarchy Id, представление в TreeView, hasChild?  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 726
Aitov,
все одним запросом СТЕ юзать.
Дайте структуру таблицы - народ напишет.
26 июл 11, 21:27    [11030818]     Ответить | Цитировать Сообщить модератору
 Re: Hierarchy Id, представление в TreeView, hasChild?  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 726
Aitov,

DECLARE @T TABLE (ID INT, ParentID INT)
INSERT INTO @t
SELECT 1,NULL 
UNION ALL SELECT 2,1 
UNION ALL SELECT 21,1 
UNION ALL SELECT 31,2 
UNION ALL SELECT 41,31 
UNION ALL SELECT 51,41 
UNION ALL SELECT 61,51 

SELECT * FROM @t

 ;WITH c AS --step1
   ( SELECT ID, ID AS ParentID
     FROM   @t
     WHERE  ID=1
     UNION ALL
     SELECT t.ID
            ,c.ParentID
     FROM  @t t
     JOIN  c 
       ON  c.ID=t.ParentID )
   ,sc AS --step2
   ( SELECT ID, ID AS ParentID
     FROM   c
     UNION ALL
     SELECT t.ID
            ,sc.ParentID
     FROM  @t t
     JOIN  sc 
       ON  sc.ID=t.ParentID )
  SELECT * 
  FROM   c
  LEFT OUTER JOIN   sc
    ON   c.ID = sc.ParentID
    AND sc.ID != sc.ParentID
  WHERE sc.ID IS NULL


(7 row(s) affected)
ID ParentID
----------- -----------
1 NULL
2 1
21 1
31 2
41 31
51 41
61 51

(7 row(s) affected)

ID ParentID ID ParentID
----------- ----------- ----------- -----------
21 1 NULL NULL
61 1 NULL NULL

(2 row(s) affected)
26 июл 11, 22:04    [11030922]     Ответить | Цитировать Сообщить модератору
 Re: Hierarchy Id, представление в TreeView, hasChild?  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 726
Aitov,

DECLARE @T TABLE (ID INT, ParentID INT)
INSERT INTO @t
SELECT 1,NULL 
UNION ALL SELECT 2,1 
UNION ALL SELECT 21,1 
UNION ALL SELECT 31,2 
UNION ALL SELECT 41,31 
UNION ALL SELECT 51,41 
UNION ALL SELECT 61,51 



 ;WITH c AS --step1
   ( SELECT ID, ID AS ParentID
     FROM   @t
     WHERE  ID=1
     UNION ALL
     SELECT t.ID
            ,c.ParentID
     FROM  @t t
     JOIN  c 
       ON  c.ID=t.ParentID )
   ,sc AS --step2
   ( SELECT ID, ID AS ParentID
     FROM   c
     UNION ALL
     SELECT t.ID
            ,sc.ParentID
     FROM  @t t
     JOIN  sc 
       ON  sc.ID=t.ParentID )
  SELECT DISTINCT c.ID
         ,CASE 
            WHEN sc.ParentID IS NOT NULL THEN '+'
           ELSE '-'
          END AS extendeble

  FROM   c
  LEFT OUTER JOIN   sc
    ON   c.ID = sc.ParentID
    AND sc.ID != sc.ParentID

ID extendeble
----------- ----------
1 +
2 +
21 -
31 +
41 +
51 +
61 -

(7 row(s) affected)
26 июл 11, 22:17    [11030957]     Ответить | Цитировать Сообщить модератору
 Re: Hierarchy Id, представление в TreeView, hasChild?  [new]
Aitov
Member

Откуда:
Сообщений: 13
Всем большое спасибо)
27 июл 11, 12:51    [11033349]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить