自连接的列子
数据
Id Amt
0001 22
0001 33
0001 12.2
0002 55
0002 66
0002 10
0003 3
0003 80
需要结果
Id Amt SumAmt
0001 22 22
0001 33 55
0001 12.2 67.2
0002 55 55
0002 66 121
0002 10 131
0003 3 3
0003 80 83
1.
if not object_id('Tempdb..#tb') is null
drop table #tb
Go
Create table #tb([Id] nvarchar(20),[Amt] money)
Insert #tb
select N'0001',22 union all
select N'0001',33 union all
select N'0001',12.2 union all
select N'0002',55 union all
select N'0002',66 union all
select N'0002',10 union all
select N'0003',3 union all
select N'0003',80
Go
;with C as
(Select *,row=row_number()over(order by ID) from #tb)
select [Id],[Amt],(select sum([Amt]) from C where ID=a.ID and row<=a.row)SumAmt
from C a
2.
IF OBJECT_ID('tempdb.dbo.#T') IS NOT NULL DROP TABLE #T
CREATE TABLE #T (Id VARCHAR(4),Amt NUMERIC(3,1))
INSERT INTO #T
SELECT '0001',22 UNION ALL
SELECT '0001',33 UNION ALL
SELECT '0001',12.2 UNION ALL
SELECT '0002',55 UNION ALL
SELECT '0002',66 UNION ALL
SELECT '0002',10 UNION ALL
SELECT '0003',3 UNION ALL
SELECT '0003',80
--SQL查询如下:
SELECT ROW_ID=IDENTITY(int,1,1),* INTO # FROM #T;
SELECT Id,Amt,
sumAmt=(SELECT SUM(Amt)
FROM #
WHERE Id=t.Id
AND ROW_ID<=t.ROW_ID)
FROM # AS t;
3.
SELECT Id,Amt,
sumAmt=(SELECT SUM(Amt)
FROM (select *,ROW_ID=ROW_NUMBER() over(order by id) from #T) o
WHERE Id=t.Id
AND ROW_ID<=t.ROW_ID)
FROM (select *,ROW_ID=ROW_NUMBER() over(order by id) from #t) AS t;

浙公网安备 33010602011771号