27,579
社区成员
发帖
与我相关
我的任务
分享
--模拟数据表
create table [TB]([id] int,[time] datetime,[count] int)
--添加模拟数据
insert [TB]
select 1,'2012-12-01 02:00:00',42 union all
select 1,'2012-12-01 14:18:12',79 union all
select 1,'2012-12-10 07:15:42',112 union all
select 1,'2012-12-14 10:06:20',57 union all
select 1,'2012-12-14 11:54:10',124 union all
select 1,'2012-12-14 14:10:27',241
--声明空白数据
DECLARE @tbnull TABLE(id INT,[time] DATETIME,[count] INT)
--递增变量
DECLARE @day INT
SET @day=0
--当月天数
DECLARE @days INT
SELECT @days= day(dateadd(mm,1,getdate())-day(getdate()))
--循环插入空白数据
WHILE (@day<@days)
BEGIN
SET @day=@day+1
INSERT INTO @tbnull
( id, time, count )
VALUES ( 1,CONVERT(DATETIME,CONVERT(VARCHAR(8),GETDATE(),120)+RIGHT('00'+@day,2)),0)
END;
--合并数据
WITH data AS
(
SELECT * FROM TB
UNION ALL
SELECT * FROM @tbnull
)
--根据日前的月份和天数分组求和,
--条件为当前的月份转换成2012-12-14 00:00:00 的时间格式
--month()、day()函数返回值为整型,故转换为字符后拼接
--数据格式为2012-12-14 00:00:00可正常运行
SELECT CAST(MONTH([time]) AS VARCHAR(4))+'-'+RIGHT('00'+CAST(DAY([time]) AS VARCHAR(4)),2) AS [time],
SUM([count]) AS SumCount FROM data
WHERE CONVERT(VARCHAR(7),[time],120)=CONVERT(VARCHAR(7),GETDATE(),120)
GROUP BY MONTH([time]),DAY([time])
--删除模拟数据
DROP TABLE TB
--结果
time SumCount
--------- -----------
12-01 121
12-02 0
12-03 0
12-04 0
12-05 0
12-06 0
12-07 0
12-08 0
12-09 0
12-10 112
12-11 0
12-12 0
12-13 0
12-14 422
12-15 0
12-16 0
12-17 0
12-18 0
12-19 0
12-20 0
12-21 0
12-22 0
12-23 0
12-24 0
12-25 0
12-26 0
12-27 0
12-28 0
12-29 0
12-30 0
12-31 0
--模拟数据表
create table [TB]([id] int,[time] datetime,[count] int)
--添加模拟数据
insert [TB]
select 1,'2012-12-01 02:00:00',42 union all
select 1,'2012-12-01 14:18:12',79 union all
select 1,'2012-12-10 07:15:42',112 union all
select 1,'2012-12-14 10:06:20',57 union all
select 1,'2012-12-14 11:54:10',124 union all
select 1,'2012-12-14 14:10:27',241
--根据日前的月份和天数分组求和,
--条件为当前的月份转换成2012-12-14 00:00:00 的时间格式
--month()、day()函数返回值为整型,故转换为字符后拼接
--数据格式为2012-12-14 00:00:00可正常运行
--如果没有12号数据则不统计
SELECT CAST(MONTH([time]) AS VARCHAR(4))+'-'+RIGHT('00'+CAST(DAY([time]) AS VARCHAR(4)),2) AS [time],
SUM([count]) AS SumCount FROM TB
WHERE CONVERT(VARCHAR(7),[time],120)=CONVERT(VARCHAR(7),GETDATE(),120)
GROUP BY MONTH([time]),DAY([time])
--删除模拟数据
DROP TABLE TB
--结果
time SumCount
--------- -----------
12-01 121
12-10 112
12-14 422