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月份的数据,即只显示与筛选条件相同年份的之前的几个月份数据。 展开
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月份的数据,即只显示与筛选条件相同年份的之前的几个月份数据。 展开
展开全部
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)+'月'
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)+'月'
展开全部
如果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])
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])
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
条件按日期判断,然后用年月分组求和
SELECT EXTRACT(YEAR_MONTH(datetime)),SUM(Amount)
FROM TABLE
WHERE datetime<'2008-03-20'
GROUP BY EXTRACT(YEAR_MONTH(datetime))
SELECT EXTRACT(YEAR_MONTH(datetime)),SUM(Amount)
FROM TABLE
WHERE datetime<'2008-03-20'
GROUP BY EXTRACT(YEAR_MONTH(datetime))
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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)
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)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询