sql怎么写(100分)

  • 主题发起人 主题发起人 daiqingbo
  • 开始时间 开始时间
D

daiqingbo

Unregistered / Unconfirmed
GUEST, unregistred user!
想将合计字段和原字段并列输出。如表的数据为
a
3
5
6
7
8
想输出
a b
3 3
5 8
6 14
7 21
8 29
要求只用一条sql语句
 
用一条语句好像有的困难。
为什么不用游标之类的语句呢?
 
此题无解:(
一定是一个程序段来完成
对记录间的数据处理,查询语言先天不足
 
sql是高度过程化的查询语言,
一条语句对此题有难度,
对我来说是无解!
 
此功能可以实现,条件是这个表存在一个不重复的递增字段,与每一条记录顺序相同。
比如你这个例子,字段a本身就可以担当此任,因此:

select a,(select sum(a) from aaa x where x.a<=y.a) as b from aaa y

如果有一个递增主码字段,例如叫做AID,则把上面语句中x.a<=y.a改为x.aid<=y.aid即可。

如果不满足这个条件,就无法实现了。
实际上,产生这种查询需求恐怕都来自于按时间或发生顺序进行统计的要求,
因此应该有这种字段存在,否则只能说表设计的不合理。

一般SQL的问题难不倒我 :-)
 
这个问题可以这样解决:
SELECT SourceField, Sum(AnotherField)
FROM aTable
GROPU BY SourceField
去试吧!
 
这几天上不了大富翁,现在刚好又重装了windows。等试验过了再给各位加分。
倾向于温柔一刀。对张域的方法持怀疑态度,不过还是会试验。
温柔一刀:就估计你会出刀:-) 不过你的方法效率如何?比如很多财务系统,借方、贷方,
余额的实现使用这种方法吗?


 
天那!这是标准的内外表关联查询,和效率有什么关系?
支持SQL的系统都一样,绝不比你做任何一个带sum的查询慢!

>>就估计你会出刀:-)
我只关心有一定难度的的问题,所以你的估计是对的,
希望以后问题多多(谁仍砖头?) :-)
 
是否一定要用SQL语句实现? 写程序可解决:

在TTable 或 TQuery 中增加一计算字段 : b
在OnCalcFields 事件中加入以下代码:

var temp_b:integer; // 为全局变量,在Table1打开前置0;

begin
temp_b:=temp_b+ Table1.fieldbyname('b').asinteger;
Table1.fieldbyname('b').asinteger:=temp_b;
end;
 
还是用子查询吧。
 
接受答案了.
 
后退
顶部