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 

 

轉自:http://blog.csdn.net/jclnb/article/details/3522544,僅供大家參考學習。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM