sql 上一行减下一行_SQL 数据库 如何实现第一行字段A减字段B得到值C,然后再用C减去第二行字段B...

SQL 数据库 如何实现第一行字段A减字段B得到值C,然后再用C减去第二行字段B

46b97262e7ffe713fd6db27f76db382d.png

即需要这样的效果:

785beefb8ff716f16b40bbdc069094a2.png

实现思路:

做一个累计变量:

d09bfabf965de87e3b3a1d5fcba24831.png

这样我们就可以直接使用字段A减去累计字段B   就可以得到我们想要的效果了

60538ec6b403e546be9ff906bf4d99f0.png

SQL实现:

这个表作为temp1

46b97262e7ffe713fd6db27f76db382d.png

第一步:将数据排序

SELECT
A,
B,
ROW_NUMBER() OVER(ORDER BY  B DESC) AS rank
FROM temp1

得到如下结果表 TB_OP_TestOut :

d5afd673f4a33b8200f575a8a2f093fd.png

第二步:表TB_OP_TestOut 自关联,关联条件A.rank>=B.rank

SELECT 
A.A,
A.B,
SUM(B.B) AS CountB,
A.A-SUM(B.B) AS C
FROM TB_OP_TestOut A
LEFT JOIN TB_OP_TestOut B ON A.rank>=B.rank
GROUP BY 
A.rank

1a27e0b0c11af429760fe61c4b69bfa7.png

详细步骤解释:

自关联数据之后:

e65a31cd7f4a16f017902e5d13abfcad.png

根据Arank分组,求累计字段:

91c9397dd4744a20e744607ef0236e9b.png

直接用A-CountB字段的结果 就是我们想要的效果了

30520b08f4d1ac2b08e3ff5d6e6b3a7b.png

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL 数据库中,可以通过 `IDENTITY` 属性来实现自动填充序号。当删除一行后,下一行的序号不会自动更新,需要手动更新。不过,可以使用 `IDENTITY_INSERT` 属性来插入自定义的序号,从而达到序号自动更新的目的。 下面是一个简单的示例,其中 `ID` 字段就是自动填充的序号: ```sql CREATE TABLE [dbo].[MyTable]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NOT NULL, [Age] [int] NOT NULL, [Gender] [nvarchar](10) NOT NULL, PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] ``` 在上述代码中,`ID` 字段使用了 `IDENTITY(1,1)` 属性,表示自动填充序号,初始为 1,每次自增 1。 当删除一行后,下一行的序号不会自动更新。如果需要手动更新序号,可以使用以下 SQL 语句: ```sql SET IDENTITY_INSERT MyTable ON GO UPDATE MyTable SET ID = ID - 1 WHERE ID > 2 GO SET IDENTITY_INSERT MyTable OFF GO ``` 上述语句中,我们首先使用 `SET IDENTITY_INSERT MyTable ON` 命令打开 `IDENTITY_INSERT` 属性,然后使用 `UPDATE` 命令更新 `ID` 字段,将所有 `ID` 大于 2 的行的 `ID` 减去 1,从而实现序号自动更新的效果。最后,使用 `SET IDENTITY_INSERT MyTable OFF` 命令关闭 `IDENTITY_INSERT` 属性。 需要注意的是,使用 `IDENTITY_INSERT` 属性插入自定义的序号可能会导致序号冲突,因此在使用前需要仔细考虑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值