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


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