SQLServer2008根据年月时间归总数据

198 篇文章 0 订阅
  1. http://www.itnose.net/detail/6009311.html
  2. select years(orderdate),  
  3.   month(OrderDate),count(1)   
  4. from   
  5.  tb  
  6. group by years(orderdate),  
  7.   month(OrderDate)  

  1. -- Author  :fredrickhu(小F,向高手学习)  
  2. -- Date    :2014-03-17 15:48:38  
  3. -- Verstion:  
  4. --      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)   
  5. --  Jul  9 2008 14:43:34   
  6. --  Copyright (c) 1988-2008 Microsoft Corporation  
  7. --  Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)  
  8. --  
  9. ----------------------------------------------------------------  
  10. --> 测试数据:[tb]  
  11. if object_id('[tb]') is not null drop table [tb]  
  12. go   
  13. create table [tb]([O_Id] int,[OrderDate] datetime,[OrderPrice] int,[Customer] varchar(6))  
  14. insert [tb]  
  15. select 1,'2008/12/29',1000,'Bush' union all  
  16. select 2,'2008/11/23',1600,'Carter' union all  
  17. select 3,'2008/11/05',700,'Bush' union all  
  18. select 4,'2008/09/28',300,'Bush' union all  
  19. select 5,'2008/08/06',2000,'Adams' union all  
  20. select 6,'2008/08/21',100,'Carter'  
  21. --------------开始查询--------------------------  
  22. declare @startdate datetime,@enddate datetime  
  23. set @startdate='2008-01-01'  
  24. set @enddate='2009-12-31'  
  25. SELECT * INTO #tb  
  26. FROM   
  27. (  
  28. select   
  29.     DISTINCT YEAR(convert(varchar(10),dateadd(day,number,@startdate),120)) AS [year],MONTH(convert(varchar(10),dateadd(day,number,@startdate),120)) AS [month]  
  30. from  
  31.     master..spt_values   
  32. where   
  33.     datediff(day,dateadd(day,number,@startdate), @enddate)>=0  
  34.     and number>=0   
  35.     and type='p'  
  36. )t  
  37. --SELECT * FROM #tb AS a LEFT JOIN tb AS b ON a.[year]=DATEPART(YEAR,b.OrderDate) AND a.[month]=DATEPART(month,b.OrderDate)  
  38.   
  39. SELECT a.*,ISNULL(COUNT(b.O_Id),0) AS 客户数量 FROM #tb AS a LEFT JOIN tb AS b ON a.[year]=DATEPART(YEAR,b.OrderDate) AND a.[month]=DATEPART(month,b.OrderDate) GROUP BY a.year,a.month ORDER BY a.year  
  40.   
  41. DROP TABLE #tb  
  42. ----------------结果----------------------------  
  43. /* year        month       客户数量 
  44. ----------- ----------- ----------- 
  45. 2008        1           0 
  46. 2008        2           0 
  47. 2008        3           0 
  48. 2008        4           0 
  49. 2008        5           0 
  50. 2008        6           0 
  51. 2008        7           0 
  52. 2008        8           2 
  53. 2008        9           1 
  54. 2008        10          0 
  55. 2008        11          2 
  56. 2008        12          1 
  57. 2009        1           0 
  58. 2009        2           0 
  59. 2009        3           0 
  60. 2009        4           0 
  61. 2009        5           0 
  62. 2009        6           0 
  63. 2009        7           0 
  64. 2009        8           0 
  65. 2009        9           0 
  66. 2009        10          0 
  67. 2009        11          0 
  68. 2009        12          0 
  69. 警告: 聚合或其他 SET 操作消除了 Null 值。 
  70.  
  71. (24 行受影响) 
  72.  
  73. */  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值