做系统统计功能时,有时候会遇到统计一年中12个月的数据 或 统计某个月中每天的数据。如果统计中某月没有数据或某天没有数据,这时候就需要生成临时表进行填充默认数据(一般默认为0 或 浮点数,具体根据业务需求来 或者自定义数据),直接从表里无法统计没有的数据。
数据库版本: sqlserver 2014
1、按年生成12个月的临时表数据(这里以 2020 年为例)
生成临时数据:
if OBJECT_ID ('tempdb..#temp_businessAllYearCount') is not null drop table #temp_businessAllYearCount
declare @StartDate DATE = '20200101'
declare @EndDate DATE = '20201201' ;
with cte as (
select @StartDate dateCol union all select DateAdd (Month,1,dateCol) from cte where dateCol < @EndDate
)
select convert(varchar(6) ,dateCol ,112) dateCol,0 as totalCount into #temp_businessAllYearCount from cte ;
查询临时表数据:
--查询数据
select * from #temp_businessAllYearCount
GO
截图:
说明:
注意临时表只能在每次会话中存在,直接使用select语句查询临时表是查询不到的,必须先创建。
if OBJECT_ID ('tempdb..#temp_businessAllYearCount') is not null drop table #temp_businessAllYearCount 临时表创建方法
declare @StartDate DATE = '20200101' declare @EndDate DATE = '20201201' ; 这两个变量的值时需要在后台将查询日期参数进行处理,再传入到查询方法中。
2、按月生成每天(可能有28、29、30、31天)的临时表数据(这里以 2020年12月 为例)
生成临时数据:
if OBJECT_ID ('tempdb..#temp_businessAllMonthCount') is not null drop table #temp_businessAllMonthCount
declare @StartDate DATETIME = '2020-12-01'
declare @EndDate DATETIME = '2020-12-31' ;
with cte as (
select @StartDate dateCol union all select dateCol +1 from cte where dateCol < @EndDate
)
select convert(varchar(10) ,dateCol ,23) dateCol,0 as totalCount into #temp_businessAllMonthCount
from cte
查询临时表数据:
--查询数据
select * from #temp_businessAllMonthCount
GO
截图:
说明:
注意临时表只能在每次会话中存在,直接使用select语句查询临时表是查询不到的,必须先创建。
if OBJECT_ID ('tempdb..#temp_businessAllMonthCount') is not null drop table #temp_businessAllMonthCount 临时表创建方法
declare @StartDate DATETIME = '2020-12-01' declare @EndDate DATETIME = '2020-12-31' ;这两个变量的值时需要在后台将查询日期参数进行处理,再传入到查询方法中。