作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在计算帐户数据,其中的值可以通过当前行值和先前行值获得。我的问题是我必须到达两列,其中两列都是相互链接的,两列都是通过当前行值和前一行值获得的。
我的示例数据
create Table Accounts (SNo int,Groups varchar(10),ToCollect int,Collected int)
insert into Accounts values(1, 'A', 4748, 4650)
insert into Accounts values(2, 'A', 4643, 4582)
insert into Accounts values(3, 'A', 4582, 4482)
insert into Accounts values(4, 'A', 4482, 4415)
insert into Accounts values(5, 'A', 4415, 4330)
insert into Accounts values(6, 'A', 4332, 4241)
insert into Accounts values(7, 'A', 4241, 2246)
insert into Accounts values(8, 'A', 4166, 6000)
insert into Accounts values(9, 'A', 4080, 0)
尝试查询:
Select *,case when ToCollect>Collected then Collected Else ToCollect End Adjusted
,case when Collected>ToCollect then Collected-ToCollect Else 0 End Excess into #1
from Accounts
select a.SNo,a.Groups,a.ToCollect,a.Collected
,case when a.ToCollect>(a.Collected+b.Excess) then a.Collected+b.Excess Else a.ToCollect End Adjusted
,case when a.Collected+b.Excess>a.ToCollect then a.Collected+b.Adjusted-a.ToCollect Else 0 End Excess
from #1 a left join #1 b on a.SNo=b.SNo-1
实际结果:
SNo Groups ToCollect Collected Adjusted Excess
1 A 4748 4650 4650 0
2 A 4643 4582 4582 0
3 A 4582 4482 4482 0
4 A 4482 4415 4415 0
5 A 4415 4330 4330 0
6 A 4332 4241 4241 0
7 A 4241 2246 4080 0
8 A 4166 6000 4166 1834
9 A 4080 0 4080 0
预期结果:
SNo Groups ToCollect Collected Adjusted Balance Excess
1 A 4748 4650 4650 98 0
2 A 4643 4582 4582 61 0
3 A 4582 4482 4482 100 0
4 A 4482 4415 4415 67 0
5 A 4415 4330 4330 85 0
6 A 4332 4241 4241 91 0
7 A 4241 2246 2246 1995 0
8 A 4166 6000 4166 0 1834
9 A 4080 0 1834 2246 0
最佳答案
这得到了 OP 想要的结果,但不知道这是否是真的正确答案:
WITH CTE AS(
SELECT A.SNo,
A.Groups,
A.ToCollect,
A.Collected,
CASE WHEN A.ToCollect > A.Collected THEN A.Collected ELSE A.ToCollect END AS Adjusted,
CASE WHEN A.ToCollect > A.Collected THEN A.ToCollect - A.Collected ELSE 0 END AS Balance,
CASE WHEN A.ToCollect < A.Collected THEN A.Collected - A.ToCollect ELSE 0 END AS Excess,
SUM(CASE WHEN A.ToCollect < A.Collected THEN A.Collected - A.ToCollect ELSE 0 END) OVER (ORDER BY SNo ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS RunningExcess
FROM dbo.Accounts A)
SELECT C.SNo,
C.Groups,
C.ToCollect,
C.Collected,
ISNULL(NULLIF(C.RunningExcess,0),C.Adjusted) AS Adjusted,
C.Balance - ISNULL(C.RunningExcess,0) AS Balance,
C.Excess
FROM CTE C;
关于sql-server - 根据先前和当前行值计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55809816/
我的应用将 SceneKit 内容的“页面”与图像和文本交替。当我从图像页面前进到新的 SceneKit 页面时,前一个 SceneKit 页面中的内容会短暂显示,然后被新内容替换。时髦。 我只使用一
我正在尝试处理(在 C# 中)包含一些数字数据的大型数据文件。给定一个整数数组,如何对其进行拆分/分组,以便如果下一个 n(两个或更多)是负数,则前一个 n 元素被分组。例如,在下面的数组中,应该使用
刚接触promises,研究过。所以我的代码和我的理解: sql.connect(config).then(function(connection) { return connection.req
目前我在 if (roobaf) block 中有一些代码,这取决于 foo 和 bar 是否为假。我可以在 block 内再次检查这些条件,但感觉像是不必要的代码重复。 if (foo) {
我是一名优秀的程序员,十分优秀!