欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-25 21:14:52
...

做系统统计功能时,有时候会遇到统计一年中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

截图:

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

说明:

注意临时表只能在每次会话中存在,直接使用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

截图:

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

说明:

注意临时表只能在每次会话中存在,直接使用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' ;这两个变量的值时需要在后台将查询日期参数进行处理,再传入到查询方法中。

 

 

 

 

 

 

 

 

 

相关标签: 数据库