求 一个简单 有点难的sql语句

求高手一个sql语句
一个表jeb有5000条记录,字段为id和je
怎么列出记录金额总和>10000的前n条记录,后面的就不需列出来了!
(也就是说如果前100条记录的金额之和大于10000了,后面的4900条就不需要列出来了)

首先需要一个流水号的列帮助计算,这里假设这个列叫id,假设数据如下:
id je
1 580
2 900
3 390
4 10000
5 100

以下实质是一条语句,为了方便说明,每个子查询都分离出来说明,第三步即为最后的语句

--(1)生成一个按行叠加的列
select *,(select sum(je) from jeb a where a.id <= b.id) as 合计金额
from jeb b
/*结果如下
id je 合计金额
1 580 580
2 900 1480
3 390 1870
4 10000 11870
5 100 11970
*/

--(2)在以上结果中找出合计金额和10000之间的临界点的id(合计金额大于10000的最小id)
select min(id) as 最小id
from (
select *,(select *,(select sum(je) from jeb a where a.id <= b.id) as 合计金额
from jeb b) tb
where 合计金额 > 10000)

/*结果如下
最小id
4
*/

--(3)从原表中找出id比第(2)步找出的最小id要少的所有记录
select *
from jeb
where id <=(
select *,(select *,(select sum(je) from jeb a where a.id <= b.id) as 合计金额
from jeb b) tb
where 合计金额 > 10000 )

-----步骤(3)即为最终结果
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-07
select Top 100 * from jeb where je>1000
第2个回答  2010-07-07
select * from (select je from jeb where je>10000 order by je desc ) where ROWNUM<101