sql - 如何在 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 语法来减去列的当前值和上一个值
解决方案
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
,只要顺序正确,它对非连续值也很稳健。
推荐阅读
- dart - 根据提供的列表和参数构建和排序新列表
- php - laravel视图页面中的选择框组合值
- svn - SVN Mergeinfo 存储在 WC 或服务器上
- ada - Ada 对象中的常量元素?
- reactjs - 在 html 中加载 10MB+ bundle.js 的最有效方法
- sql - 分组依据不包含数据时按列表显示数据
- c++ - 如何在 mfc 中设置大小和透明/清除 CMFCToolBar 按钮和图标?
- hybris - Hybris Init 只初始化暂存目录
- ubuntu - Ubuntu 16.04 - Vagrant Box 问题:ssh_exchange_identification:读取:连接由对等方重置
- jenkins - Sed 命令在 Jenkins 流水线中不起作用