日期:2014-05-18 浏览次数:20529 次
exec cs#'$tbl id orgID date Amount 1 1001 2012-2-1 20 2 1002 2012-2-1 10 3 1003 2012-2-1 5 4 1001 2012-2-2 10 5 1002 2012-2-3 10 6 1003 2012-2-4 5 ' --> 测试数据:[tbl] if object_id('[tbl]') is not null drop table [tbl] go create table [tbl]( [id] int, [orgID] int, [date] datetime, [Amount] int ) go insert [tbl] select 1,1001,'2012-2-1',20 union all select 2,1002,'2012-2-1',10 union all select 3,1003,'2012-2-1',5 union all select 4,1001,'2012-2-2',10 union all select 5,1002,'2012-2-3',10 union all select 6,1003,'2012-2-4',5 ;with t as( select ROW_NUMBER()Over(PARTITION by [orgID] order by getdate())as num, *,Amount as total from tbl ), m as( select num,id,orgID,[date],Amount,total from t where num=1 union all select a.num,a.id,a.orgID,a.[date],a.Amount,b.total+a.Amount from t a inner join m b on a.num=b.num+1 and a.orgID=b.orgID ) select id, orgID, [date], Amount, total from m order by orgID /* id orgID date Amount total 1 1001 2012-02-01 00:00:00.000 20 20 4 1001 2012-02-02 00:00:00.000 10 30 2 1002 2012-02-01 00:00:00.000 10 20 5 1002 2012-02-03 00:00:00.000 10 10 3 1003 2012-02-01 00:00:00.000 5 5 6 1003 2012-02-04 00:00:00.000 5 10 */ 这个就是统计数据,你可以给它写到触发器里面
------解决方案--------------------
create PROCEDURE xxx_SP @BatchNo NVARCHAR(50) AS declare @orgID nvarchar(10) declare @Cur cursor begin SET @Cur = CURSOR FOR (SELECT orgID FROM dt where BatchNo=@BatchNo) OPEN @Cur FETCH NEXT FROM @Cur INTO @orgID WHILE(@@FETCH_STATUS = 0) BEGIN update dt set totalAmount = select sum (Amount ) from dt where orgID=@orgID group by Amount where BatchNo=@BatchNo and orgID=@orgID end