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

汇总问题

楼主yiyiguxing(一意孤行)2005-10-24 22:53:26 在 MS-SQL Server / 基础类 提问

例如有这样一个表:  
  第一行为列名:  
  id     name       num       addtime  
  1         a             10       2005-9-5  
  2         b             20       2005-9-6  
  3         b             30       2005-9-8  
  4         a             5         2005-9-10  
  5         a             12       2005-9-11  
  6         a             35       2005-9-11  
  7         b             25       2005-9-12  
   
  假如今天的日期是   2005-9-12   需要查询5天内a和b的num总和.  
  结果应该是:  
  a     52  
  b     45  
   
  请问查询语句应该如何写?  
   
   
  问题点数:20、回复次数:10Top

1 楼yiyiguxing(一意孤行)回复于 2005-10-24 23:00:17 得分 0

说明一下,表大约有几万行,name列不是光a和b,要有几千个不同的name值Top

2 楼singlepine(小山)回复于 2005-10-24 23:04:00 得分 0

select   name,   num=sum(num)   from   a   where   addtime>=dateadd(day,-5,addtime)   and   addtime<=getdate()   group   by   nameTop

3 楼singlepine(小山)回复于 2005-10-24 23:04:45 得分 0

select   name,   num=sum(num)   from   tablename   where   addtime>=dateadd(day,-5,addtime)   and   addtime<=getdate()   group   by   name  
  Top

4 楼lxzm1001(*~悠悠蓝星梦~*)回复于 2005-10-24 23:06:45 得分 0

select   name,sum(num)   from   tablename   group   by   name   where   addtime   between   dateadd(day,addtime,-5)   and   addtimeTop

5 楼yiyiguxing(一意孤行)回复于 2005-10-24 23:16:00 得分 0

感谢楼上的解答,是我没把问题分析清楚.  
  查询结果应该是5天内按name列的重复次数排序.比如上面的表5天内a重复了3次,b重复了2次.那结果按倒序的话应该是:  
   
    a  
    bTop

6 楼singlepine(小山)回复于 2005-10-24 23:31:36 得分 15

select   name,   num=sum(num)   from   tablename   where   addtime>=dateadd(day,-5,addtime)   and   addtime<=getdate()    
  group   by   name   order   by   count(num)   descTop

7 楼lxzm1001(*~悠悠蓝星梦~*)回复于 2005-10-24 23:36:39 得分 5

select   count(name)   from   tablename   where   addtime>=dateadd(day,-5,addtime)   and   addtime<=addtime   group   by   nameTop

8 楼lxzm1001(*~悠悠蓝星梦~*)回复于 2005-10-24 23:37:13 得分 0

select   count(name)   from   tablename   where   addtime>=dateadd(day,-5,addtime)   and   addtime<=addtime   group   by   name   order   by   name   descTop

9 楼vivianfdlpw()回复于 2005-10-24 23:41:30 得分 0

select   name  
                ,sum(case   when   datediff(day,addtime,getdate())<=5    
                                    then   num    
                                    else   0    
                          end  
                        )   as   'num'  
  from   表   t  
  group   by   name  
  order   by   (select   count(1)    
                            from   表    
                                    where   name=t.name    
                                                and   datediff(day,addtime,getdate())<=5)   desc  
   
  or  
   
  select   name  
                ,num  
  from   (  
                  select   name  
                                ,sum(case   when   datediff(day,addtime,getdate())<=5    
                                                    then   num    
                                                    else   0    
                                          end  
                                        )   as   'num'  
                                ,count(1)   as   'count'  
                  from   表  
                  group   by   name  
            )t  
  order   by   [count]   desc  
  Top

10 楼yiyiguxing(一意孤行)回复于 2005-10-25 22:20:16 得分 0

感谢所有给予热情帮助的朋友.  
  vivianfdlpw朋友的方案复杂了点儿,小弟没弄明白,所以没给分,十分抱歉,一并表示感谢.Top

相关问题

  • 汇总?
  • 汇总问题
  • 如何汇总???
  • 如何汇总?
  • union汇总.
  • 如何汇总
  • 分页汇总...
  • 汇总统计
  • DATAVIEW汇总问题
  • 在线求汇总

关键词

  • addtime
  • dateadd
  • 表
  • day
  • num
  • 应该

得分解答快速导航

  • 帖主:yiyiguxing
  • singlepine
  • lxzm1001

相关链接

  • SQL Server类图书

广告也精彩

反馈

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