求一个按行数分组汇总的SQL语句写法

例如我有1000行记录,记录中有数量、金额字段,我想每200行对数量、金额做一个汇总,总汇总出5条记录,应该怎么写这个SQL语句?
感谢几位的回答,我所说的1000行记录,每200行汇总都是举例,其实记录肯定是不固定的的,会有超过10万行吧,所在3楼、4楼的写法就不现实了。另问一下,存储过程具体是怎么实现的?

第1个回答  2011-02-28
你这个如果是oracle或者支持伪列的SQL,可以这样做
SELECT 数量, 金额, FROM (SELECT 数量, 金额, rownum AS rk from tab) WHERE rk BETWEEN 0 AND 200
UNION ALL
SELECT 数量, 金额, FROM (SELECT 数量, 金额, rownum AS rk from tab) WHERE rk > 200 AND rk <= 400
UNION ALL
SELECT 数量, 金额, FROM (SELECT 数量, 金额, rownum AS rk from tab) WHERE rk > 400 AND rk <= 600
UNION ALL
SELECT 数量, 金额, FROM (SELECT 数量, 金额, rownum AS rk from tab) WHERE rk > 600 AND rk <= 800
UNION ALL
SELECT 数量, 金额, FROM (SELECT 数量, 金额, rownum AS rk from tab) WHERE rk > 800 AND rk <= 1000

但是这样效率比较低下。建议用存储过程来做。

存储过程,定义游标,然后通过读取每一行,然后做统计,如果够200行,就sum..
第2个回答  2011-02-28
union 试试
select sum(数量),sum(金额) from (select t1.数量,t1.金额,rownum rn from (select * from table_name) t1 where rownum<=200)
where rn>=1
union
select sum(数量),sum(金额) from (select t1.数量,t1.金额,rownum rn from (select * from table_name) t1 where rownum<=400)
where rn>=201
union
select sum(数量),sum(金额) from (select t1.数量,t1.金额,rownum rn from (select * from table_name) t1 where rownum<=600)
where rn>=401
union
select sum(数量),sum(金额) from (select t1.数量,t1.金额,rownum rn from (select * from table_name) t1 where rownum<=800)
where rn>=601
union
select sum(数量),sum(金额) from (select t1.数量,t1.金额,rownum rn from (select * from table_name) t1 where rownum<=1000)
where rn>=801;

运行
数量 金额
21000 12231
12323 2323
22144 1232
34343 9123
123123 12323
第3个回答  2011-02-28
存储过程可以写出来
或者 用多条sql语句
只能200搜索一次
--------------------------
我有个思路 存储过程里有循环 用循环实现
就按你的例子来说 1000行记录 200行汇总成一行
有点类似于分页 首先获得能够分多少个200
循环这个数字 就是要汇总多少条
SELECT TOP 200 * FROM TestTable WHERE
(ID NOT IN (SELECT TOP (200*(页数-1)) id FROM 表 ORDER BY id))
-------------------
(页数-1)就是那个循环的值-1
上面那个语句是获取200条记录
select [汇总他们的字段] from (上面那个sql)
循环这个 就可以了 这是我的想法 可能我写的有些有些不对
只是给你个参考
第4个回答  2011-02-28
在记录中加一个序号自增的字段,然后用语句来选择,比如1-200,201-400这样选择。本回答被提问者采纳
相似回答