Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как добавить полученный запрос в таблицу / 3 сообщений из 3, страница 1 из 1
12.11.2019, 19:13
    #39888240
Samat Samat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как добавить полученный запрос в таблицу
В ниже указанном коде данные из последнего CTE нужно добавить в таблицу, при этом пересчитать переменную @Total. Как добавить данные в таблицу и продолжить вычитывать @Total.
Код: 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.
declare @i int, @Total money, @Oplata money;
set @Total = 100
set @i = 1;
while @Total > 0
begin
with Payments 
as ( select *
     from dbo.FD_Payments
	 where LINK = 2),
     Bills 
as ( select *,
            isnull(SUM(N_Amount) OVER (PARTITION BY F_Subscr, YEAR(D_Date), MONTH(D_Date)),0) AS [Месячный Долг],
			case when dense_rank() over (partition by F_Subscr, YEAR(D_Date), MONTH(D_Date) order by D_Date desc) = 1 
			then isnull(SUM(N_Amount) OVER (PARTITION BY F_Subscr, YEAR(D_Date), MONTH(D_Date)),0) 
			else 0 end as Ранг,
			ROW_NUMBER() OVER (PARTITION BY F_Subscr ORDER BY D_Date) AS Номер
	 FROM dbo.FD_Bills
	      WHERE F_subscr IN (SELECT F_Subscr FROM Payments) AND N_Amount <> 0),
	 Ddd
as (select p.LINK as F_Payments, b.LINK as F_Bills, C_Sale_Items, Ранг,
       case when @Total > b.[Месячный Долг] then b.[Месячный Долг]
	        else @Total end *b.N_Amount_Rest/b.[Месячный Долг] as Распределение
from Payments p JOIN
	 Bills b on p.F_Subscr = b.F_Subscr
where b.Номер = @i)
select @Total = @Total -  (select case when Ранг <> 0 
                      then case when @Total > Ранг then Ранг
					            else @Total end
                      else 0 end from Ddd)

set @i = @i + 1
select @Total
end;
...
Рейтинг: 0 / 0
12.11.2019, 19:22
    #39888243
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как добавить полученный запрос в таблицу
Samat Samat
Как добавить данные в таблицу и продолжить вычитывать @Total.
Никак.
...
Рейтинг: 0 / 0
13.11.2019, 11:35
    #39888503
Kopelly
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как добавить полученный запрос в таблицу
Мне кажется вместо dense_rank() правильнее использовать row_number() - иначе будет задвоение при нескольких счетах от меньшей даты в месяце.
Код: 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.
declare @i int, @Total money, @Oplata money;
set @Total = 100
set @i = 1;

drop table if exists #tmp;
create table #tmp (F_Payments bigint,
                   F_Bills bigint,
				   C_Sale_Items varchar(200),
				   Ранг money,
				   Распределение money)
declare @t table (Ранг money)
while @Total > 0
begin
with Payments 
as ( select *
     from dbo.FD_Payments
	 where LINK = 2),
     Bills 
as ( select *,
            isnull(SUM(N_Amount) OVER (PARTITION BY F_Subscr, YEAR(D_Date), MONTH(D_Date)),0) AS [Месячный Долг],
			case when row_number() over (partition by F_Subscr, YEAR(D_Date), MONTH(D_Date) order by D_Date desc) = 1 
			then isnull(SUM(N_Amount) OVER (PARTITION BY F_Subscr, YEAR(D_Date), MONTH(D_Date)),0) 
			else 0 end as Ранг,
			ROW_NUMBER() OVER (PARTITION BY F_Subscr ORDER BY D_Date) AS Номер
	 FROM dbo.FD_Bills
	      WHERE F_subscr IN (SELECT F_Subscr FROM Payments) AND N_Amount <> 0),
	 Ddd
as (select p.LINK as F_Payments, b.LINK as F_Bills, C_Sale_Items, 
           Ранг,
       case when @Total > b.[Месячный Долг] then b.[Месячный Долг]
	        else @Total end *b.N_Amount_Open/b.[Месячный Долг] as Распределение
from Payments p JOIN
	 Bills b on p.F_Subscr = b.F_Subscr
where b.Номер = @i)
Insert into #tmp
output inserted.Ранг into @t
Select * From Ddd

select @Total = @Total -  (select case when Ранг <> 0 
                      then case when @Total > Ранг then Ранг
					            else @Total end
                      else 0 end from @t)

delete @t

set @i = @i + 1
select @Total
end;
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как добавить полученный запрос в таблицу / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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