Конференция "Базы" » как вернуть иерархические данные [D7, MSSQL]
 
  • serepun'ka (24.06.09 14:04) [0]
    Всем доброго времени суток!

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

    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 отобразил все это в "хорошем" виде? Если можно, то как?
  • clickmaker © (24.06.09 14:32) [1]
    т.е. тип и подтип - это как бы папки, если по аналогии с визуальным деревом, а значениеХ - ветки?
  • serepun'ka (24.06.09 14:41) [2]

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

    да
  • Онотоле (24.06.09 14:55) [3]
    мало информации по структуре исх.данных, но в любом случае для результата нужен первичный ключ и поле со ссылкой на родительскую запись
  • serepun'ka (24.06.09 15:13) [4]

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

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


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

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

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

    id | parent | value

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

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

    записей порядка сотни тысяч
  • clickmaker © (24.06.09 16:14) [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
  • Онотоле (24.06.09 17:24) [6]
    я пользуюсь union - ом, собирая подобные конструкции
  • serepun'ka (24.06.09 17:31) [7]

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

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

    Всем спасибо, тема закрыта.
  • Ega23 © (24.06.09 17:49) [8]

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


    Запаришься тут union-ом...
  • ANB (25.06.09 13:20) [9]

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

    Эт точно. connect by - наше все :)
 
Конференция "Базы" » как вернуть иерархические данные [D7, MSSQL]
Есть новые Нет новых   [134473   +33][b:0][p:0]