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

Откуда:
Сообщений: 7
Таблица и данные:
create table #Test 
        (
            ID int not null,
            Parent_ID int not null,
            [Name] varchar(15) not null,
            Coast money null
        ); 
              
insert into #Test values(1, 0, 'Продукт', null);
insert into #Test values(2, 1, 'Молочный', null);
insert into #Test values(3, 1, 'Рыба', null);
insert into #Test values(4, 2, 'Молоко', 30.00);
insert into #Test values(5, 2, 'Кефир', 60.00);
insert into #Test values(6, 3, 'Треска', 400.00);
insert into #Test values(7, 3, 'Семга', 700.00);


Формирование иерархической структуры:
with cteRN
     as (
         select *,
                row_number() over(partition by Parent_ID order by([Name])) as rn
         from   #Test
     ),
     ctePath
     as (
         select ID,
                Parent_ID,
                [Name],
                0 as lvl,
                convert(varchar(max), id) as sortpath
         from   #Test
         where  ID = 1
         
         union all
         
         select C.ID,
                C.Parent_ID,
                C.[NAME],
                P.lvl + 1,
                convert(
                    varchar(max),
                    P.sortpath + '.' + convert(varchar(max), c.rn)
                )           as sortpath           
         from   ctePath     as P
                join cteRN  as C on C.Parent_ID = P.ID
     )

select ID,
       Parent_ID,
       replicate(' | ', lvl) + [NAME] as ProductTree
from   ctePath
order by sortpath;

drop table #Test;


Помогите дополнить запрос, чтобы выводилась ещё и итоговая стоимость по группам/подгруппам/листьям. Примерно вот так:


ID Parent_ID ProductTree Coast
1 0 Продукт 1180,00
2 1 | Молочный 80,00
5 2 | | Кефир 60,00
4 2 | | Молоко 30,00
3 1 | Рыба 1100,00
7 3 | | Семга 700,00
6 3 | | Треска 400,00
7 мар 18, 10:43    [21242605]     Ответить | Цитировать Сообщить модератору
 Re: Иерархическая структура и итоговая стоимость.  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
ChambaVamba,

with cteRN
     as (
         select *,
                row_number() over(partition by Parent_ID order by([Name])) as rn
         from   #Test
     ),
     ctePath
     as (
         select ID,
                Parent_ID,
				--'/' as Path,
                [Name],
                0 as lvl,
                convert(varchar(max), id) as sortpath,
				Coast
         from   #Test
         where  ID = 1 
         
         union all
         
         select C.ID,
                C.Parent_ID,
				--p.path+cast(C.ID as varchar(5))+'/',
                C.[NAME],
                P.lvl + 1,
                convert(
                    varchar(max),
                    P.sortpath + '.' + convert(varchar(max), c.rn)
                )           as sortpath,
				C.Coast
         from   ctePath     as P
                join cteRN  as C on C.Parent_ID = P.ID
     )

select ID,
       Parent_ID,--path,
       replicate(' | ', lvl) + [NAME] as ProductTree,
	   (Select sum(b.Coast) From ctePath b Where b.sortpath+'.' like a.sortpath+'.%' )
from   ctePath a
order by sortpath;

drop table #Test;
7 мар 18, 11:10    [21242677]     Ответить | Цитировать Сообщить модератору
 Re: Иерархическая структура и итоговая стоимость.  [new]
ChambaVamba
Member

Откуда:
Сообщений: 7
Kopelly,

Да, спасибо, работает.
7 мар 18, 12:10    [21242938]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить