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

Откуда: Армения, Ереван
Сообщений: 101
имеется таблица с данными TreeView

item_id	parent_id	level	item_name	full_id
1 0 0 Treeview 01.00.00.00
2 1 1 it1 01.02.00.00
3 2 2 it11 01.02.02.00
4 3 3 it111 01.02.03.04
5 3 3 it112 01.02.03.05
6 3 3 it113 01.02.03.06

нужно в одном запросе получить путь Элемента, т. е.

для item_id =6 получить строку "Treeview -> it1 -> it11 -> it113"

как этo можно сделать ?
23 ноя 12, 18:01    [13521238]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для TreeView  [new]
Crimean
Member

Откуда:
Сообщений: 13148
а кто мешает сам тривью заполнять итеративно? выгребайте по левелу записи, перед добавлением - ищите в самом тривью парента
коллизий не будет, так как при выгребании по левелу паренты будут уже внутри контрола при приходе подчиненных
а путь элемента вам сам тривью сформирует
или у вас такой хитрый тривью что его надо готовым путем кормить?
23 ноя 12, 18:08    [13521273]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для TreeView  [new]
Гость333
Member

Откуда:
Сообщений: 3683
create table #TreeView
( item_id   int,
  parent_id int,
  level     int,
  item_name varchar(100),
  full_id   varchar(100)
);
insert #TreeView values (1, 0, 0, 'TreeView', '01.00.00.00');
insert #TreeView values (2, 1, 1, 'it1', '01.02.00.00');
insert #TreeView values (3, 2, 2, 'it11', '01.02.02.00');
insert #TreeView values (4, 3, 3, 'it111', '01.02.03.04');
insert #TreeView values (5, 3, 3, 'it112', '01.02.03.05');
insert #TreeView values (6, 3, 3, 'it113', '01.02.03.06');

with cte as
(  select t.item_id, t.parent_id, cast(t.item_name as varchar(max)) as item_path, 1 as cte_level
   from #TreeView t
   where t.item_id = 6
   union all
   select c.item_id, t.parent_id, t.item_name + ' -> ' + c.item_path, c.cte_level + 1
   from cte c
        inner join #TreeView t on t.item_id = c.parent_id
)
select top(1) c.item_id, c.item_path
from cte c
order by c.cte_level desc;

drop table #TreeView;
23 ноя 12, 18:14    [13521293]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для TreeView  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
Сам Treeview заполнен. С Treeview проблем нет.

можно конечно и в Treeview добавить столбец Path и при заполнении заполнить и этот столбец - аналогично столбцу full_id.

Но этого делать не хочется, item_name длинные строковые данные, уровень Treeview 5.

Это займет лишнее место.

лучше в запросе получить путь Элемента, т. е.

для item_id =6 получить строку "Treeview -> it1 -> it11 -> it113"

если конечно удастся.
23 ноя 12, 18:22    [13521308]     Ответить | Цитировать Сообщить модератору
 Re: Запрос для TreeView  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
Гость333,

Спасибо большое, сработало!
23 ноя 12, 18:24    [13521322]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить