首页 > 解决方案 > 如何在 SQL Server 中减去当前值和以前的值

问题描述

有一张表,需要减去一列以前和当前的金额。表值在下面,需要为Cal-Amount列编写语法

Id Amount Cal-Amount
 1  100   0
 2  200   0
 3  400   0
 4  500   0

Cal-Amount带样本值的计算公式

Id Amount Cal-Amount
 1  100   (0-100)=100
 2  200   (100-200)=100
 3  400   (200-400)=200
 4  500   (400-500)=100

需要 SQL 语法来减去列的当前值和上一个值

标签: sqlsql-servertsql

解决方案


LAG如果您使用的是 SQL Server 2012 或更高版本,则这是一种选择:

SELECT
    Id,
    Amount,
    LAG(Amount, 1, 0) OVER (ORDER BY Id) - Amount AS [Cal-Amount]
FROM yourTable;

如果您使用的是早期版本的 SQL Server,那么我们可以使用自联接:

SELECT
    Id,
    Amount,
    COALESCE(t2.Amount, 0) - t1.Amount AS [Cal-Amount]
FROM yourTable t1
LEFT JOIN yourTable t2
    ON t1.Id = t2.Id + 1;

但请注意,自联接选项可能仅在Id值是连续的情况下才有效。LAG 可能是最有效的方法Id,只要顺序正确,它对非连续值也很稳健。


推荐阅读