SELECT ... GROUP BY ... 真不能按记录数分组?
我有一个销售记录,我把这些发票数据按数量进行分组,将每10个求和得到一行统计记录。 比如:
1 4.5 012312
2 12.2 021323
.
.
89 90.2 082923
90 3.2 012093
进行分组统计,得到 9 个统计记录每个统计记录是10个原始记录之和。
但我插了许多资料,但还没找到一个答案。 比如应该有一个这样的分组条件:
SELECT SUM(SFJE) AS HJSFJE from XSJL GROUP ON 10
注:我要一次执行一个 SQL 语句来得到统计结果。 在客户端用循环计算时速度太慢了而且浪费网络带宽,尤其是记录太多时。
问题点数:100、回复次数:7Top
1 楼ferrytang(欢迎你)回复于 2002-03-21 16:14:18 得分 5
用存储过程实现
Top
2 楼zhuzhichao(竹之草)回复于 2002-03-21 16:15:18 得分 30
SELECT SUM(SFJE) AS HJSFJE from XSJL
GROUP by (序好字段 - 1) / 10
即可.Top
3 楼warning(爱就爱了)回复于 2002-03-21 16:16:12 得分 10
试试grouping
GROUPING
是一个聚合函数,它产生一个附加的列,当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。仅在与包含 CUBE 或 ROLLUP 运算符的 GROUP BY 子句相联系的选择列表中才允许分组。Top
4 楼warning(爱就爱了)回复于 2002-03-21 16:18:50 得分 15
下面的示例将 royalty 的数值分组,并聚合 advance 的数值。GROUPING 函数应用于 royalty 列。
USE pubs
SELECT royalty, SUM(advance) 'total advance',
GROUPING(royalty) 'grp'
FROM titles
GROUP BY royalty WITH ROLLUP
结果集在 royalty 下显示两个空值。第一个 NULL 代表从表中这一列得到的空值组。第二个 NULL 在 ROLLUP 操作所添加的汇总行中。汇总行显示的是所有 royalty 组的 advance 合计数值,并且在 grp 列中用 1 标识。
下面是结果集:
royalty total advance grp
--------- --------------------- ---
NULL NULL 0
10 57000.0000 0
12 2275.0000 0
14 4000.0000 0
16 7000.0000 0
24 25125.0000 0
NULL 95400.0000 1Top
5 楼x_zing(阿浩)回复于 2002-03-21 16:29:52 得分 25
如果你的记录有递增的序号字段,则可用 zhuzhichao兄的方法,如果没有就自己加一个递增字段,然后对这个字段进行group by,如
select identity(int,1,1) as col0,col1,col2... into #tmp from xsjl
SELECT SUM(SFJE) AS HJSFJE from #tmp
GROUP by (col0 - 1) / 10
drop table #tmpTop
6 楼china_hfz(江夏)回复于 2002-03-21 18:27:08 得分 10
通用的:
select identity(int,1,1) as col0,col1,col2... into #tmp from xsjl
select FLOOR((col0 -1)/10) as id ,sum(col1) as sfje from #tmp group by FLOOR((col0-1)/10)
drop table #tmp
Top
7 楼windindance(风舞轻扬·白首为功名)回复于 2002-03-23 13:54:26 得分 5
SELECT SUM(SFJE) AS HJSFJE from XSJL GROUP ON (ID / 10)Top




