Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Рекурсивный запрос / 1 сообщений из 1, страница 1 из 1
30.07.2021, 19:57
    #40087425
vizier
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рекурсивный запрос
Добрый день, уважаемые.
Нужна помощь по запросу
есть две таблицы одна с данными другая с коэффициентами, нужно сделать подсчет значений в запросе, скорее всего надо использовать рекурсию cte.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
declare @src table(row_i int, index_i int, value_f float)
declare @koef table ( 
  index_i int, 
  value_f float,  -- значение на которое нужно уменьшить сумму в пердудушем подсчете по индексу
  koef_f float    -- число на которое увеличиваем общее значение в каждой строек
)
insert into @src (row_i, index_i, value_f)
values
(1, 1, 50.0),
(2, 1, 50.0),
(3, 1, 50.0),
(4, 2, 50.0),
(5, 2, 50.0),
(6, 3, 50.0)

insert into @koef (index_i, value_f, koef_f)
values
(1, 50.0, 10.0),
(2, 70.0, 5.0),
(3, 40.0, 15.0)

 /* первая часть */
;with cte as
(
select 
    s.index_i
   ,s.value_f
   ,sum(k.koef_f) over (order by s.row_i)               korf_sum
   ,s.value_f + sum(k.koef_f) over (order by s.row_i)   total
from @src s 
  join @koef k on k.index_i = s.index_i
  where k.index_i = 1

 union all
  ....
)
select *
from cte
  
/* в результате должна быть такая таблица
index_i, value_f, korf_sum, total
      1,      50,       10,    60
      1,      50,       20,    70
      1,      50,       30,    80 

      2,      10,        5,    15 <= value_f = total(index_i = 1) - @koef.value_f (80 -70 = 10)
      2,      10,       10,    20

      3,       5,       15,    20 <= value_f = total(index_i = 2) - @koef.value_f (10 - 5 = 5)
*/
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Рекурсивный запрос / 1 сообщений из 1, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]