SQL循环相加的问题。。

来源:百度知道 编辑:UC知道 时间:2024/06/30 19:30:59
我想要做一个SQL报表,一共5列分别为A,B,C,D,E。其中A为日期型,B,C,D,E都是数字型。E=B+C-D。并且B的值等于上一行E的值。我举例说明。
A B C D E
1-06 1000 500 300 1200
1-07 1200 900 400 -100
1-08 -100 600 300 200
1-09 200 500 0 700
1-10 700 0 0 700

这个查询怎么写啊?很急很急~~救命~~~
我的已知条件是A已经通过一个报表查出;B只知道最开始的的那一个值例如1000,剩下的1200等都是通过上面算出来的;C D的值也是知道的。E的值通过B+C-D得出,得到的E值是B的下一行数据。。需要得到的就是一个日期,对应的B,C,D,E的值。。。我不知道我说的会不会很混乱。。。。。

依你的题意我理解为A、C、D为已知,而B、E为所求值。
加一列id值,1,2,3,4.......顺序增加,也就是加个数字主键。
增加一张表(下为temptablename)与原表结构相同。
declare @id int
declare @maxid int
select @maxid = max(id) from tablename
set @id = 1
while(@id <= @maxid)
begin
if @id = 1
begin
insert into temptablename
select @id,A,1000,C,D,1000+C-D from tablename
end
else
begin
insert into temptablename
select @id,A,(select E from temptablename where id = @id-1),C,D,(select E from temptablename where id = @id-1)+C-D from tablename
end
set @id = @id + 1
end

select * from temptablename

--由于你表里没有合适的主键,
--建立带自增字段"id"的临时表
SELECT IDENTITY (int, 1, 1) AS id, *
INTO #temp
FROM tableName

--定义两个变量用作循环控制并赋值
DECLARE @i int, @count int
SET @i = 2
SELECT @count = count(*) FROM #temp

--更新临时表,更新第一行的E
UPDATE #temp SET E = B + C - D WHERE id = 1

--循环,从第二行开