SQL如何按年份月份统计? 10

数据表中有如下数据IDdatetimeAmount12008-01-011022008-01-1510032008-01-205042008-02-0110052008-... 数据表中有如下数据
ID datetime Amount
1 2008-01-01 10
2 2008-01-15 100
3 2008-01-20 50
4 2008-02-01 100
5 2008-02-10 120
6 2008-02-17 130
7 2008-03-10 200
8 2008-03-13 30
9 2008-03-25 250

筛选条件为时间
如果输入时间为 2008-02-01的话,只统计2008年2月之前的月份数据,显示为
2008年1月 160
如果输入时间为 2008-03-20的话,则统计2008年1月的,2008年2月份的,2008年3月份的算到输入时间这天为止,显示为
2008年1月 160
2008年2月 350
2008年3月 230(不加上2008-03-25的数值)
请教用SQL语句如果实现,请写详细点。
数据表中还有2009年度2010年度等相同格式的数据,筛选条件为动态的,在程序页面由用户随机输入,当输入为2008-12-31时,提取显示出2008年1到12月份的数据,如果条件为2009-06-16的话,只显示2009年1月份到2009年6月份的数据,即只显示与筛选条件相同年份的之前的几个月份数据。
展开
 我来答
vinson_shen
2010-07-19 · TA获得超过2503个赞
知道小有建树答主
回答量:960
采纳率:100%
帮助的人:0
展开全部
select left(convert(varchar(10),[datetime],120),7) as 月份,sum(Amount) as 总数
from 表
where [datetime]<='你输入的时间条件'
group by left(convert(varchar(10),[datetime],120),7)

根据你的数据结果格式重新修改了下:

select cast(datepart(year,[datetime]) as varchar)+'年'+cast(datepart(month,[datetime]) as varchar)+'月' as 月份,sum(Amount) as 总数

from 表

where [datetime]<='你输入的时间条件' and datepart(year,[datetime])=left('你输入的时间条件',4)

group by cast(datepart(year,[datetime]) as varchar)+'年'+cast(datepart(month,[datetime]) as varchar)+'月'
dr_zxp
推荐于2018-03-13 · TA获得超过861个赞
知道小有建树答主
回答量:765
采纳率:100%
帮助的人:856万
展开全部
如果datetime 是字符型

select left([datetime],7),sum(amount)
from tbl
where [datetime]<'2008-03-20'
group by left([datetime],7)
如果是datetime类型
left([datetime],7)换成datepart(month,[datetime])
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
轩辕渔民
2010-07-19 · TA获得超过177个赞
知道小有建树答主
回答量:138
采纳率:100%
帮助的人:0
展开全部
条件按日期判断,然后用年月分组求和

SELECT EXTRACT(YEAR_MONTH(datetime)),SUM(Amount)
FROM TABLE
WHERE datetime<'2008-03-20'
GROUP BY EXTRACT(YEAR_MONTH(datetime))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e6ea01f
2010-07-19 · TA获得超过449个赞
知道小有建树答主
回答量:425
采纳率:0%
帮助的人:543万
展开全部
declare @t table(id int, [datetime] datetime, amount int )
insert into @t
select 1,'2008-01-01',10 union
select 2,'2008-01-15',100 union
select 3,'2008-01-20',50 union
select 4,'2008-02-01',100 union
select 5,'2008-02-10',120 union
select 6,'2008-02-17',130 union
select 7,'2008-03-10',200 union
select 8,'2008-03-13',30 union
select 9,'2008-03-25',250

--select * from @t

select CONVERT(varchar(7),[datetime],120),SUM(amount)
from @t
where [datetime]<'2008-03-20'
group by CONVERT(varchar(7),[datetime],120)

--------------------
(9 row(s) affected)
yyyyMM sumAmount
------- -----------
2008-01 160
2008-02 350
2008-03 230

(3 row(s) affected)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式