首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SQL Server迭代求和

SQL Server迭代求和

作者头像
geovindu
发布2026-06-18 13:09:39
发布2026-06-18 13:09:39
310
举报
代码语言:javascript
复制
drop table t_geovindu 
  
create table t_geovindu 
( 
    xid int IDENTITY (1, 1), 
    price money, 
    DebitCredit VARCHAR(2), 
    adate datetime default(getdate()) 
      
) 
  
insert into t_geovindu(DebitCredit,price) values('C',10) 
insert into t_geovindu(DebitCredit,price) values('C',25) 
insert into t_geovindu(DebitCredit,price) values('C',36) 
insert into t_geovindu(DebitCredit,price) values('C',66) 
insert into t_geovindu(DebitCredit,price) values('D',-11) 
insert into t_geovindu(DebitCredit,price) values('C',32) 
insert into t_geovindu(DebitCredit,price) values('D',-50) 
  
  
-- 
select a.xid, a.price, 
 (select sum(price) from t_geovindu b where b.xid <= a.xid) as Balance,DebitCredit   
from t_geovindu a 
  
-- 
select xid, price,  
 (case  when Balance  is null then price else Balance  end ) as Balance  
from
 (select a.xid, (select  sum(price) from t_geovindu b where b.xid < a.xid)  as Balance  , a.price 
from t_geovindu a)  x 
-- 
  
select  sum(price) from t_geovindu b where (b.xid < a.xid) 
  
select a.xid, (select  sum(price) from t_geovindu b where b.xid < a.xid)  as Balance  , a.price 
from t_geovindu a 
  
--- 
create function mysum(@xh int, @price int) returns int
begin
   return (select 
           (case when Balance  is null then @price  else Balance  end) as Balance   
          from ( select  sum(price) as Balance  from t_geovindu where xid < @xh) x) 
end
--- 
select xid, price, dbo.mysum(xid, price)  as Balance  
from t_geovindu 
  
  
  
  
  
  
  
create table vipnoDly 
( 
    VID Int IDENTITY (1, 1) PRIMARY KEY, invoiceno nvarchar(50),indate datetime, vipno nvarchar(50),amount int,dcr nvarchar(20) 
) 
go 
  
SET IDENTITY_INSERT [dbo].vipnoDly ON 
Insert vipnoDly(invoiceno,indate,vipno,amount,dcr) Select invoiceno,indate,vipno,amount,dcr From vipdly AS A Where vipno='654321' order by A.indate 
  
select * from vipnoDly 
  
--SET IDENTITY_INSERT dbo.Tool ON 
  
  
Create Function [dbo].[GetVipNoDlyList] 
( 
    @ID nvarchar(20) 
) 
Returns @Tree Table (VID Int IDENTITY (1, 1), invoiceno nvarchar(50),indate datetime, vipno nvarchar(50),amount int,dcr nvarchar(20)) 
As
Begin
Insert @Tree(invoiceno,indate,vipno,amount,dcr) Select invoiceno,indate,vipno,amount,dcr From vipdly AS A Where vipno=@ID order by A.indate 
Return
End
GO 
  
select * from [dbo].[GetVipNoDlyList] ('geovindu') as a order by indate 
  
---SQL Server聚合函数和子查询迭代求和 
---如果ID不是第一條記錄,會出現第一行統計合計有問題,所以需查詢生成一個新的ID增長記錄 
select a.VID, a.amount, 
 (select sum(amount) from [dbo].[GetVipNoDlyList] ('geovindu') b where b.VID <= a.VID) as Balance   
from [dbo].[GetVipNoDlyList] ('geovindu') a 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档