powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Рекурсивный запрос
1 сообщений из 1, страница 1 из 1
Рекурсивный запрос
    #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
1 сообщений из 1, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Рекурсивный запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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