Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как вернуть иерархические данные [D7, MSSQL]


serepun'ka ©   (2009-06-24 14:04:00) 

Всем доброго времени суток!

Есть запрос, возвращающий данные вида:

type | subtype  |  value       | official_inf
_________________________________
тип1 | подтип1 | значение1 | служ.ифн.1
тип1 | подтип1 | значение2 | служ.ифн.1
тип1 | подтип1 | значение3 | служ.ифн.1
тип2 | подтип1 | значение1 | служ.ифн.1
тип2 | подтип1 | значение2 | служ.ифн.1
тип2 | подтип1 | значение3 | служ.ифн.1

можно ли его преобразовать таким образом, чтобы dxDBTreeList отобразил все это в "хорошем" виде? Если можно, то как?


ANB   (2009-06-25 13:20:00) [1]


> Запаришься тут union-ом...

Эт точно. connect by - наше все :)


Ega23   (2009-06-24 17:49:00) [2]


> я пользуюсь union - ом, собирая подобные конструкции


Запаришься тут union-ом...


serepun'ka   (2009-06-24 17:31:00) [3]


> clickmaker ©   (24.06.09 16:14) [5]

ну так-то... вероятно, больше никак...

Всем спасибо, тема закрыта.


Онотоле   (2009-06-24 17:24:00) [4]

я пользуюсь union - ом, собирая подобные конструкции


clickmaker   (2009-06-24 16:14:00) [5]

наверно, как-то так

declare crs cursor
for select type, subtype, value, official_inf
from SrcTable

while (1=1) begin
 fetch next from crs into @type, @subtype, @value, @official_inf
 if @@fetch_status <> 0 break

 select @typeid = id from DestTable where value = @type
 if @typeid is null begin
   insert into DestTable (parent, value) values(0, @type)
   set @typeid = @@identity
 end
 select @subtypeid = id from DestTable where parentid = @typeid and value = @subtype
 if @subtypeid is null begin
   insert into DestTable (parent, value) values(@typeid , @subtype)
   set @subtypeid = @@identity
 end
 select @valueid = id from DestTable where id = @subtypeid and value = @value
 if @valueid is null begin
   insert into DestTable (parent, value) values(@subtypeid , @value)
 end
end


serepun'ka   (2009-06-24 15:13:00) [6]


> Онотоле   (24.06.09 14:55) [3]

структура совсем исходных данных эээ... там запрос длинный...
первичный ключ есть.


> поле со ссылкой на родительскую запись

не совсем понял, что имелось в виду?

нужно как-то транспонировать все это дело в:

id | parent | value

1 | 0         | тип1
2 | 1         | подтип1
3 | 2         | значение1
4 | 2         | значение2
5 | 2         | значение3

ну и так далее... в общем, не так уж и важно, чтоб это все было обязательно запросом - можно и процедурой, лишь бы шустро выполнялось все это...

записей порядка сотни тысяч


Онотоле   (2009-06-24 14:55:00) [7]

мало информации по структуре исх.данных, но в любом случае для результата нужен первичный ключ и поле со ссылкой на родительскую запись


serepun'ka   (2009-06-24 14:41:00) [8]


> clickmaker ©   (24.06.09 14:32) [1]

да


clickmaker   (2009-06-24 14:32:00) [9]

т.е. тип и подтип - это как бы папки, если по аналогии с визуальным деревом, а значениеХ - ветки?


Наверх

Титульная страница Поиск, карта сайта Написать письмо