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

Откуда: Уфа
Сообщений: 321
Доброго времени суток!
Есть такая табличка:
LevelIdidMasterIdItemName
111proj1
213proj2
314proj3
4211obj1
5223obj2
6234obj3
7321Doc1
8331Doc2
9342Doc3

Из нее хочу получить такую:
idMasterIdItemName
1proj1
2proj2
3proj3
41obj1
52obj2
63obj3
74Doc1
84Doc2
95Doc3

Запутался уже. Прошу помощи!
Заранее спасибо!
8 мар 12, 19:34    [12215648]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по иерархическим данным  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
YarmakIN
Заранее спасибо!
Хрен с тем что нифига не хотите раздираться.
Но это, что-то напоминает:

К сообщению приложен файл. Размер - 116Kb
9 мар 12, 02:26    [12216961]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по иерархическим данным  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Mnior
раздираться
* разбираться

Фрейд? :)

YarmakIN, ну хотя бы попытки показать.
9 мар 12, 02:30    [12216976]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по иерархическим данным  [new]
YarmakIN
Member

Откуда: Уфа
Сообщений: 321
С помощью форума пока у меня получилось вот что:
    select * 
    into #t
    from (
        select
             '1_1' as id
            ,null as MasterId
            ,'Projects' as ItemName
        union all
        select distinct
             '2_' + cast(id as nvarchar(max)) as id
            ,'1_1' as MasterId
            ,p.Name_Var as ItemName
        from t_Project p
        union all
        select distinct
             '3_' + cast(p.ObjectDesignig_id as nvarchar(max)) as id
            ,'2_' + cast(p.id as nvarchar(max)) as MasterId
            ,o.Name_Var as ItemName
        from t_ObjectDesigning o
        inner join t_Project p on p.ObjectDesignig_id = o.id
        union all
        select distinct
             '4_' + cast(dcs.id as nvarchar(max)) as id
            ,'3_' + cast(dcs.ObjectDesigning_id as nvarchar(max)) as MasterId
            ,dm.Name_Var as ItemName
        from t_DocCompleteSet dcs
        inner join t_Spr_DrawingMark dm on dm.id = dcs.DrawingMark_id
    ) t

    ;with cte (id, MasterId, ItemName, lvl)
    as
    (
      select id, MasterId, ItemName, 0 as lvl 
      from #t 
      where Id = '1_1'
      union all
      select t1.id, t1.MasterId, t1.ItemName, t2.lvl+1
      from #t t1
      join cte t2 on t2.id = t1.MasterId
    )
    select * from cte --where lvl <3

    drop table #t

Сильно не нравится эти строковые идентификаторы. Чувствую, что можно сделать красИвее и оттого правильнее.
9 мар 12, 11:10    [12217230]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по иерархическим данным  [new]
YarmakIN
Member

Откуда: Уфа
Сообщений: 321
По поводу сайта во 2-ом посте. Если это сильно не хорошо или даже преступление тем более - готов убрать. Сейчас делаю новый дизайн+функциональность необходимую. Так что это временно.
9 мар 12, 11:13    [12217240]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по иерархическим данным  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 659
Начал писать ответ и понял, что что-то не то
YarmakIN
С помощью форума пока у меня получилось вот что:
.....
        select distinct
             '3_' + cast(p.ObjectDesignig_id as nvarchar(max)) as id
            ,'2_' + cast(p.id as nvarchar(max)) as MasterId
            ,o.Name_Var as ItemName
        from t_ObjectDesigning o
        inner join t_Project p on p.ObjectDesignig_id = o.id
.....


Это не опечатка!? У Вас правда на каждый объект (t_ObjectDesigning) есть строчка в таблице проектов (t_Project)?
Если да, то почему с документами (t_DocCompleteSet) не тоже самое?
Меняйте архитектуру пока не поздно!

P.S. Будет здорово, если Вы приведёте скрипты создания таблиц (достаточно тех столбцов, которые участвуют в запросе) и заполнения их начальными данными.
9 мар 12, 12:26    [12217428]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по иерархическим данным  [new]
YarmakIN
Member

Откуда: Уфа
Сообщений: 321
На каждый объект есть строчка в таблице проектов, т.к. объект не существет сам по себе. Аналогично с парой объект-комплект документов: сам по себе комплект не существует, он привязан к какому то объекту.
Приведу модель бд, по ней будет понятно, как связаны таблицы. Если надо могу и скрипты таблиц привести.
Картинка с другого сайта.
9 мар 12, 13:23    [12217568]     Ответить | Цитировать Сообщить модератору
 Re: Помощь по иерархическим данным  [new]
YarmakIN
Member

Откуда: Уфа
Сообщений: 321
Ну, а по теме, думаю, если идентификаторы int-овые заменить на GUID(). И добавить в каждую талицу MasterId. Наверное так проще будет.
9 мар 12, 13:25    [12217575]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить