[英]Windowing functions cumulative aggregation
I am calculating cumulative by summing some columns.我通过对一些列求和来计算累积值。 The code is working.
代码正在运行。 But I want to include an extra variable for the first line only.
但我只想在第一行包含一个额外的变量。 Then it miscalculates.
然后它计算错误。
What I want to do in line 1:我想在第 1 行做什么:
SUM(@devir + netTakas - ToplamCikis + YeniKrediKullanımı - Islem)
What I want to do except line 1:除了第 1 行,我想做什么:
SUM(netTakas - ToplamCikis + YeniKrediKullanımı - Islem)
When I do this with case, the wrong result is obtained.当我对案例执行此操作时,会得到错误的结果。
SQL code: SQL 代码:
declare @devir float = 1308973;
WITH asilTablo AS(
select * from #tmpbrut1
union
select * from #tmpbrut
)
SELECT
*,
CASE WHEN ROW_NUMBER() OVER(order by takasTarihi) >= 2 then
SUM(netTakas - ToplamCikis + YeniKrediKullanımı - Islem) OVER (ORDER BY takasTarihi ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
else SUM(@devir + netTakas - ToplamCikis + YeniKrediKullanımı - Islem) OVER (ORDER BY takasTarihi ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) end AS [Kümülatif Toplam]
FROM asilTablo
So for example on line 1, it will do this:因此,例如在第 1 行,它将执行以下操作:
@devir+netTakas-ToplamCikis+YeniKredKullanımı-Islem = Kümülatif Toplam
In places other than line 1, it will do this:在第 1 行以外的地方,它将执行以下操作:
Kümülatif Toplam + netTakas-ToplamCikis+YeniKredKullanımı-Islem
@devir = 10
operation on the first line: @devir = 10
第一行的操作:
@devir + netTakas - ToplamCikis + YeniKrediKullanımı - Islem
Operations on the other line:另一条线上的操作:
netTakas - ToplamCikis + YeniKrediKullanımı - Islem
Operations of variables and columns in the first row, The sum of the columns in the row 1 and the column in the "cumulative total" in the next row第一行变量和列的运算,第一行的列与下一行“累计”列的总和
CREATE TABLE #Tmp1(
tarih date,
netTakas int,
ToplamCikis int,
YeniKrediKullanımı int,
Islem int
)
CREATE TABLE #Tmp2(
tarih date,
netTakas int,
ToplamCikis int,
YeniKrediKullanımı int,
Islem int
)
insert into #Tmp1 (tarih, netTakas, ToplamCikis, YeniKrediKullanımı, Islem) VALUES ('20211227', 125, 34, 57, 347)
insert into #Tmp1 (tarih, netTakas, ToplamCikis, YeniKrediKullanımı, Islem) VALUES ('20211228', 135, 34, 587, 3624)
insert into #Tmp1 (tarih, netTakas, ToplamCikis, YeniKrediKullanımı, Islem) VALUES ('20211229', 125, 347, 577, 34)
insert into #Tmp1 (tarih, netTakas, ToplamCikis, YeniKrediKullanımı, Islem) VALUES ('20211230', 175, 344, 597, 374)
insert into #Tmp1 (tarih, netTakas, ToplamCikis, YeniKrediKullanımı, Islem) VALUES ('20211231', 1875, 364, 587, 38684)
insert into #Tmp1 (tarih, netTakas, ToplamCikis, YeniKrediKullanımı, Islem) VALUES ('20220103', 1295, 354, 575, 344)
insert into #Tmp1 (tarih, netTakas, ToplamCikis, YeniKrediKullanımı, Islem) VALUES ('20220104', 1285, 344, 547, 344)
insert into #Tmp2 (tarih, netTakas, ToplamCikis, YeniKrediKullanımı, Islem) VALUES ('20211226', 12453485, 3444, 5447, 34544)
declare @devir float = 1308973;
WITH asilTablo AS
(
SELECT *
FROM #Tmp1
union
Select *
from #Tmp2
)
SELECT
tarih,
netTakas,
ToplamCikis,
YeniKrediKullanımı,
Islem,
CASE WHEN ROW_NUMBER() OVER(order by tarih) >= 2 then SUM(netTakas - ToplamCikis + YeniKrediKullanımı - Islem) OVER (ORDER BY tarih ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
else SUM(@devir + netTakas - ToplamCikis + YeniKrediKullanımı - Islem) OVER (ORDER BY tarih ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) end AS [Kümülatif Toplam]
FROM
asilTablo
use ROW_NUMBER()
on inner query.在内部查询中使用
ROW_NUMBER()
。 On outer query check for when ROW_NUMBER()
= 1
include @devir
in calculation在外部查询中检查何时
ROW_NUMBER()
= 1
在计算中包含@devir
SELECT
SUM (CASE WHEN RN = 1 THEN @devir ELSE 0 END
+ netTakas - ToplamCikis + YeniKrediKullanımı - Islem)
OVER (ORDER BY tarih)
FROM
(
SELECT *, RN = ROW_NUMBER() OVER(order by tarih)
FROM asilTablo
) a
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.