首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问一个日期统计查询

2013-09-05 
请教一个日期统计查询表字段就两个金额日期2002013-01-021202013-07-08……需要按每月的26号到下一个月的25

请教一个日期统计查询
表字段就两个
金额   日期
200   2013-01-02
120   2013-07-08
……


需要按每月的26号到下一个月的25号作为一个月份期间去合计金额,还要按年份。需要注意,比如:2012-12-28要算成2013年的一月份。



[解决办法]

select CONVERT(varchar(7),日期,120) as 年月,SUM(金额) as 金额
from (
select case when day(日期)>25 then DATEADD(day,6,日期) else 日期 end as 日期,金额
from tb)t
group by CONVERT(varchar(7),日期,120)

[解决办法]
if OBJECT_ID('tempdb..#temp', 'u') is not null   drop table #temp;
go
create table #temp( [金额] int, [日期] datetime);
insert #temp
select '200','2013-01-02' union all
select '120','2013-07-08' 

--假如你要统计2013年:
DECLARE @year CHAR(4)
SET @year = '2013'
--select * from #temp
;WITH CTE AS
(
SELECT [month]=@year + '-'+RIGHT('0'+RTRIM(number+1), 2) FROM master..spt_values WHERE type='p' AND number < 12
)
SELECT a.[month], total=ISNULL(SUM(b.金额),0)
FROM CTE a
LEFT JOIN #temp b
ON b.日期 >= DATEADD(month, -1, a.[month]+'-26')
AND b.日期 < CAST(a.[month]+'-26' AS DATETIME)--26之前,相当于<=25号的23:59:59.997
GROUP BY [month]
/*
monthtotal
2013-01200
2013-020
2013-030
2013-040
2013-050
2013-060
2013-07120
2013-080
2013-090
2013-100
2013-110
2013-120
*/

[解决办法]

SELECT 
CASE 
WHEN DATEPART(day,日期)>=26 THEN CONVERT(CHAR(7),DATEADD(mm,1,日期),20)
ELSE CONVERT(CHAR(7),日期,20)
END ym,SUM(金额) 金额
FROM 表
GROUP BY 
CASE 
WHEN DATEPART(day,日期)>=26 THEN CONVERT(CHAR(7),DATEADD(mm,1,日期),20)
ELSE CONVERT(CHAR(7),日期,20)
END

热点排行