1、遇到的问题和数据的需求
- 结果的主键为日期+企业id,假设总共有10个企业,当某个企业当日没有数据时会导致改天统计出来的数据条数为9个
- 这时很多人想到使用企业档案左关联数据即可解决这个问题,但是这个时候会随之产生一个问题,当数据的统计日期为多天时,是无法通过简单的左关联产生全量的日期+企业的数据
2、解决思路
- 在原先准备落库的数据做一次优化,计算出涉及的日期
- 把涉及的日期和企业档案进行一个全关联
- 最后把全关联的结果集,左关联每日数据,关联不上的数据补0即可
3、代码示例
@some_value:=
SELECT a.stat_date
,b.comp_no
,b.comp_name
,sum(value1) as value1
,sum(value2) as value2
,sum(value3) as value3
FROM table_source a
JOIN table_comp b
ON a.cust_no = b.cust_no
WHERE a.ds between '20240101' and '20240131'
and LENGTH(a.ds)=8
and ISDATE(a.ds,'yyyymmdd')=TRUE
and a.stat_date=a.ds
group by a.stat_date
,b.serial_num
,b.imp_comp
order by a.stat_date
,b.serial_num
,b.imp_comp
;
@all_date:=
select
stat_date
,'1' as join_key
from @some_value
group by stat_date
;
@all_comp:=
select
comp_no
,max(comp_name) as comp_name
,'1' as join_key
from table_comp
group by comp_no
;
@all_date_comp:=
select
stat_date
,comp_no
,comp_name
from @all_date t1
join @all_comp t2 on t1.join_key=t2.join_key
;
select
t1.stat_date
,t1.comp_no
,t1.comp_name
,nvl(value1 ,0) as value1
,nvl(value2 ,0) as value2
,nvl(value3 ,0) as value3
,getdate() as extend_field_update_time
,null as extend_field_1
,null as extend_field_2
,null as extend_field_3
,t1.stat_date as ds
from @all_date_comp t1
left join @some_value t2 on t1.stat_date=t2.stat_date and t1.comp_no=t2.comp_no
order by
t1.stat_date
,t1.comp_no
;