CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

SELECT ... GROUP BY ... 真不能按记录数分组?

楼主karakax(CAMEL)2002-03-21 16:00:00 在 MS-SQL Server / 基础类 提问

我有一个销售记录,我把这些发票数据按数量进行分组,将每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

相关问题

  • 为什么不能按顺序执行!!!!!
  • win2000server上安装oracle816nt,不能按?
  • 表记录删除问题(只留下各个分组的最大记录)
  • 请问如何统计分组中各小组的记录数?
  • 如何取分组中时间最晚的一条记录
  • 如何取分组中时间最晚的一条记录
  • 我想按分组,取一个月中最大的记录,
  • 请教:如何把不同的记录分组?
  • 求一个对表中记录分组的存储过程
  • 分组取最小时间的记录,急啊

关键词

  • 字段
  • 数值
  • null
  • sfje
  • 分组
  • royalty
  • 记录
  • rollup
  • col
  • group

得分解答快速导航

  • 帖主:karakax
  • ferrytang
  • zhuzhichao
  • warning
  • warning
  • x_zing
  • china_hfz
  • windindance

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo