sql日期补全,sql补全
</pre><pre name="code" class="sql">IF OBJECT_ID('TBL')IS NOT NULL
DROP TABLE TBL
GO
CREATE TABLE TBL(
日期 DATE
)
GO
INSERT TBL
SELECT '2014-09-30' UNION ALL
SELECT '2014-10-06'
go
DECLARE @DATE DATE
SELECT @DATE=MAX(日期) FROM TBL
;WITH T
AS(
SELECT * FROM TBL
UNION ALL
SELECT DATEADD(DD,1,A.日期) FROM T A
WHERE NOT EXISTS(SELECT * FROM TBL B
WHERE B.日期=DATEADD(DD,1,A.日期)
)
AND A.日期<@DATE
)
SELECT *FROM T ORDER BY 日期select COUNT(*),convert(date,max(日期))
from 表 group by convert(date,日期)
union all
select * from
(select 0 co,convert(varchar(10),dateadd(dd,number,convert(varchar(8),getdate(),120)+'01'),120) as dt
from master..spt_values
where type='P'
and dateadd(dd,number,convert(varchar(8),getdate(),120)+'01')<=dateadd(dd,-1,convert(varchar(8),dateadd(mm,1,getdate()),120)+'01')) c
where dt not in (select convert(date,max(日期)) from 表 group by convert(date,日期) )
将表和日期改为相应的表明和日期列名即可
根据你的数据,给你个例子,其中的数据类型不一定和你的完全一样,需要你自己根据你的实际情况去调整:
--创建表--create table [table](dtime datetime, data varchar(10), num smallint)--添加测试数据--insert into [table] select '2002-9-8' ,'data1',0--insert into [table] select '2002-9-10' ,'data1',3--insert into [table] select '2002-9-11' ,'data1',4--测试语句select * from [table]--你需要的效果declare @d table(time datetime)declare @date datetimeset @date='2002-09-07'while @date<='2002-09-12' begin insert @d select @date set @date= dateadd(dd,1,cast(@date as datetime)) endselect convert(varchar(10),time,120) as time, isnull(data, 'data1') as data,isnull(num, 0) as numfrom @d d left join [table] ton convert(varchar(10),dtime,120) = convert(varchar(10),time,120)最终结果:
具体还有什么其他想法,可以参考我的博客:
blog.sina.com.cn/s/blog_9f39f0c70102ux87.html
里面的第五点,标题是"5、按月统计查询"
