SqlServer按年按月生成默认统计数据并写入临时表进行统计

做系统统计功能时,有时候会遇到统计一年中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' ;这两个变量的值时需要在后台将查询日期参数进行处理,再传入到查询方法中。

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值