这个sql语句如何写?(30分)

  • 主题发起人 主题发起人 fstao
  • 开始时间 开始时间
F

fstao

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库mssql7,有一表dbo.table1,其数据如下:
id f0 f1
1 20 15
2 30 30
3 40 35
4 50 40

我想sql语句实现:
id f0 f1 f3
1 20 15 5 //20-15=5
2 30 30 5 //30-30=0+5=5
3 40 35 10 //40-35=5+5=10
4 50 40 20 //50-40=10+10=20

如何写这个语句?
 
select test1.id,test1.f0,test1.f1,(select sum(test2.f0-test2.f1)
from test as test2
where test2.id<=test1.id) as f3
from test as test1
 
SQL语句应该不行,建议你用储存过程,用一个变量记录f3字段的值。
本人对Mssql的sql语法不太了解。如为interbase的则没问题。
 
我觉得这样“效率”不高,因为每一条记录都要重新查询一次该表,如果表里有
10000条记,则要对表进取10000次查询才能得到结果。建议你用储存过程,在中用
一个变量记录f3字段的值。
本人对Mssql的sql语法不太了解。如下为InterBase的实现:
Create Procedure GetTable Returns(
id integer;
f0 integer;
f1 integer;
f3 integer
)as
DECLARE VARIABLE temp integer;
BEGIN
temp=0;
FOR SELECT id,f0,f1,(f0-f1)
FROM table1
INTO :id,:f0,:f1,:f3
DO
BEGIN
temp=temp+f3;
f3=temp;
SUSPEND;
END
END
 
如何用mssql的存贮过程写语句呢?
 
你可用select id,fo,f1,f0+f1 as f2
from dbo.table
 
这个问题属于 Running Sum 的问题,因为 f3 的值同其它数据行有关。
这种情况下,f3最好不要存储在表中。你只要在显示或打印数据时临时计算就行了。
每次增加、删除纪录,甚至排序有变化你都要重新计算结果。效率很低。
 
多人接受答案了。
 
后退
顶部