SQLSERVER中按年月分组

一个表有三个字段id,dt,d  分别存放id,时间,数值  
id    dt    d 
1 2004-08-11 12:12:00.000 9  
2 2005-09-11 12:08:00.000 2  
3 2005-08-11 12:12:00.000 6  
4 2005-09-11 12:12:00.000 10  
5 2005-08-11 12:12:00.000 0  
要求按照时间里的月份分组求d字段和

 1 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[abc]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
2 drop table [dbo].[abc]
3 GO
4
5 CREATE TABLE [dbo].[abc] (
6 [id] [int] NOT NULL ,
7 [dt] [datetime] NULL ,
8 [d] [int] NULL
9 ) ON [PRIMARY]
10 GO
11
12 insert into abc (id,dt,d) values(1,'2004-08-11 12:12:00',9)
13 insert into abc (id,dt,d) values(2,'2005-09-11 12:8:00',2)
14 insert into abc (id,dt,d) values(3,'2005-08-11 12:12:00',6)
15 insert into abc (id,dt,d) values(4,'2005-09-11 12:12:00',10)
16 insert into abc (id,dt,d) values(5,'2005-08-11 12:12:00',0)
17 insert into abc (id,dt,d) values(6,'2004-11-2 12:12:00',4)
18 insert into abc (id,dt,d) values(7,'2004-11-10 12:12:00',4)
19 insert into abc (id,dt,d) values(8,'2004-11-30 12:12:00',4)
20
21 select * from abc
22 select datepart(month,dt)as 月份,sum(d) as 合计 from abc group by datepart(month,dt)

其实就用了一个DATEPART函数 
引申一下:如果统计1,2,3,4,5,6,7,8,9,10,11月上旬,11月中下旬,12月的怎么办?
可以这样:

1 select case datepart(month,dt)
2 when 11 then case sign(datepart(day,dt)-11) when -1 then 11 else 13 end
3 else datepart(month,dt) end as 月份,
4 sum(d) as 统计
5 from abc group by
6 case datepart(month,dt)
7 when 11 then case sign(datepart(day,dt)-11) when -1 then 11 else 13 end
8 else datepart(month,dt) end

再引申,如果统计把年月作为分组统计的依据可以这样:

1 select datename(year,dt)+datename(month,dt)as 年月 ,sum(d) as 统计 from abc group by datename(year,dt)+datename(month,dt)

最后,明白group by 后面不仅可以跟字段名就可以了。

再问再续:
1、按照旬统计

1 select case (datepart(day,dt)-1)/10 when 0 then '上旬' when 1 then '中旬' else '下旬' end as 旬,
2 sum(d) as 统计
3 from abc group by
4 case (datepart(day,dt)-1)/10 when 0 then '上旬' when 1 then '中旬' else '下旬' end

2、按 年+旬 分组统计

1 select datename(year,dt)+datename(month,dt)+case (datepart(day,dt)-1)/10 when 0 then '上旬' when 1 then '中旬' else '下旬' end as 日期, sum(d) as 统计
2 from abc
3 group by datename(year,dt)+datename(month,dt)+case (datepart(day,dt)-1)/10 when 0 then '上旬' when 1 then '中旬' else '下旬' end

SQLSERVER中按年月分组的更多相关文章

  1. SQLSERVER中的ALL、PERCENT、CUBE关键字、ROLLUP关键字和GROUPING函数

    SQLSERVER中的ALL.PERCENT.CUBE关键字.ROLLUP关键字和GROUPING函数 先来创建一个测试表 USE [tempdb] GO )) GO INSERT INTO [#te ...

  2. SQLSERVER中的假脱机spool

    SQLSERVER中的假脱机spool 我发现网上对于假脱机的解释都非常零散,究竟假脱机是什么? 这几天在家里研究了一下,收集了很多网上的资料 假脱机是中文的翻译,而英文的名字叫做 spool 在徐老 ...

  3. [转]在SqlServer 中解析JSON数据

      在Sqlserver中可以直接处理Xml格式的数据,但因为项目需要所以要保存JSON格式的数据到Sqlserver中在博客:Consuming JSON Strings in SQL Server ...

  4. SqlServer中Sql语句的逻辑执行顺序

    准备数据 Sql脚本如下,两张表,一张客户表Customers只包含customerid和city字段,一张订单表Orders包含orderid和customerid(关联Customers的cust ...

  5. 在SQL Server 2012中如何使用分组集

    作者:Itzik Ben-Gan  翻译:张洪举 此文摘自作者的<Microsoft SQL Server 2012 T-SQL基础>. 分组集就是你据以分组的一个属性集.传统上,SQL中 ...

  6. SQLServer 中实现类似MySQL中的group_concat函数的功能

    SQLServer中没有MySQL中的group_concat函数,可以把分组的数据连接在一起. 后在网上查找,找到了可以实现此功能的方法,特此记录下. SELECT a, stuff((SELECT ...

  7. SqlServer中怎么删除重复的记录(表中没有id)

    SqlServer中怎么删除重复的记录(表中没有id) 其实我在别的网址也查到过删除重复的记录,不知道我是我SqlServer2012版本太低还是啥原因 delete from scwhere (c# ...

  8. 我是如何在SQLServer中处理每天四亿三千万记录的

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

  9. SQLSERVER中NULL位图的作用

    SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站:www.sqlskills.com,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Da ...

随机推荐

  1. URL是什么?

    URL是统一资源定位符,有时也被俗称为网页地址. 如同在网络上的门牌,是因特网上标准的资源的地址(Address). 在因特网的历史上,统一资源定位符的发明是一个非常基础的步骤.统一资源定位符的语法是 ...

  2. C# 图片裁剪代码

    /// <summary> /// 缩小裁剪图片 /// </summary> /// <param name="int_Width">要缩小裁 ...

  3. 【JavaScript】深入理解JavaScript之强大的原型和原型链

    由于JavaScript是唯一一个被广泛使用的基于原型继承的语言,所以理解两种继承模式的差异是需要一定时间的,今天我们就来了解一下原型和原型链. AD: hasOwnProperty函数: hasOw ...

  4. iis7.5配置.net mvc注意事项

    iis7.5配置.net mvc注意事项   1. 应用程序池采用经典模式,framework4.0.可能存在权限问题,解决办法:在高级设置的标识设为LocalSystem.一般mvc都采用集成模式, ...

  5. [Angular 2] Share a Service Across Angular 2 Components and Modules

    Services are used to share data between components. They follow a module pattern that allows you to ...

  6. sqlserver 行转列 语文,数学,物理,化学

    数据库查询行转列 1.原数据库值 stdname stdsubject result 张三 语文 张三 数学 张三 物理 李四 语文 李四 数学 李四 物理 李四 化学 李四 化学 2.要得到如下表 ...

  7. 全栈一路坑之使用django创建博客

    最近在看一篇全栈增长工程师实战,然后学习里面的项目,结果发现作者用的技术太过老旧,好多东西都已经被抛弃了,所以结合着官方文档和自己的一些理解将错误的信息替换一下,边写边学习 准备工作和工具 作者说需要 ...

  8. Advanced Awk for Sysadmins

    转:http://www.linuxforu.com/2011/06/advanced-awk-for-sysadmins/ By Vishal Bhatia on June 1, 2011 in H ...

  9. 对shell中的与(&&)和或(||)的理解

    先说明一下: 如果第一个命令执行成功,与操作符 (&&)才会执行第二个命令 如果第一个命令执行失败,或操作符 (||)才会执行第二个命令 可以分析一下下面的命令的输出: #!/bin/ ...

  10. Android——AnimationDrawable 实现动画

    Android中的AnimationDrawable可以加载Drawable资源实现帧动画.实现步骤如下: 一.设置动画播放的帧资源 <?xml version="1.0" ...