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

Откуда:
Сообщений: 5
Нужно из иерархии (снимок 1) сделать плоскую структуру, т.е. чтобы у каждого уровня иерархии был свой столбец (ID_Level1, Name_Level1, ID_Level2, Name_Level2, ID_Level3, Name_Level3). Последние задание в КР, не могу додуматься как сделать. Помогите пожалуйста(

К сообщению приложен файл. Размер - 16Kb
18 сен 19, 03:53    [21972946]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
declare @t table (id int, name varchar(30), ID_Parent int, Level int);

insert into @t
values
 (1, 'Food', NULL,1),
 (2, 'Non Food', Null, 1),
 (3, 'Chocolates', 1, 2),
 (4, 'Beverage', 1, 2),
 (5, 'Sweets', 1,2),
 (6,'Wet Wipes', 2,2),
 (7, 'Shampoo', 2,2),
 (8, 'Dark chocolate',3,3)

 ;WITH tree AS
(
    SELECT 
        id as ID_CURR,
        ID,
        ID as ID_1,
        Name as Name_1,
        cast(0 as int) as ID_2,
        cast('na' as varchar(30)) as Name_2,
        cast(0 as int) as ID_3,
        cast('na' as varchar(30)) as Name_3,
        ID_Parent,
        Level
    FROM 
        @t
    WHERE
        Level = 1
    UNION ALL
    SELECT
        tree.ID_CURR,
        tbl.ID,
        tree.ID_1,
        tree.Name_1,
        case when tbl.Level = 2 then tbl.ID else tree.ID_2 end as ID_2,
        case when tbl.Level = 2 then tbl.Name else tree.Name_2 end as Name_2,
        case when tbl.Level = 3 then tbl.id else tree.ID_3 end as ID_3,
        case when tbl.Level = 3 then tbl.Name else tree.Name_3 end as Name_3,
        tbl.ID_Parent,
        tbl.Level
    FROM 
        @t tbl
    JOIN
        tree
        ON tree.ID = tbl.ID_Parent
		)
		SELECT
   ID_1,
   Name_1,
   ID_2,
   Name_2,
   ID_3,
   Name_3

FROM 
       tree
OPTION (MAXRECURSION 0)
18 сен 19, 05:40    [21972950]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить