实现思路:
1、对明细表用窗口函数从省份、城市、县区维度计算累计值,对目标表分别按省份、城市聚合关联;然后将聚合后的表和原表按照省份、城市、区县进行关联。
2、结合第一步实现的结果,使用存储过程,根据参数是省份还是城市,动态返回查询结果。
伪代码:
create procedure p_dynamic_select(
@para varchar(50)
)
as
begin
if (select count(1) from 省份动态查询 where 省份=@para)>1
begin
select 日期,指标占比 from 省份动态查询 where 省份=@para group by 省份
end
else if(select count(1) from 省份动态查询 where 城市=@para)>1
begin
select 日期,指标占比 from 省份动态查询 where 城市=@para group by 省份,城市
end
end
或者更直接的方法:把整个累计计算逻辑写成两大段SQL在存储过程中根据参数判断返回。
供参考。