动态 SQL: 数据集中如何动态拼接多个 SQL 语句
需求
数据库中每天都会自动创建一个数据库表, 数据表名一般都是 "字符串"+ 当天日期, 像是这样的情况要查一个月或是一年的数据就需要动态拼接了.
做法
1、首先接收外部传来的两个参数
2、根据这两个参数用interval 函数计算出有多少天 =interval(arg1,arg2), 这一步主要是为了之后的扩展算总数.
3、
在 B2 写 to(0,A1) 作为扩展, 在 C2 利用elapse() 函数计算出日期,D2 中 =if(B2==0,"select * from","union all select * from")+string(C2) 主要就是做 sql 的拼接. 根据日期拼接出查询不同表的 sql.
4、D3 中做了最后的拼接, 利用 sum(D2{}) 拼接了所有 sql 语句, 此时拼接出来的语句中间还有逗号, 需要用replace 函数将逗号替换为空格.
这是最终拼接结果
这样的 sql 在单元格中是无法直接使用的, 需要用引入式子表, 将这个单元格的结果传给子表进行执行. 报表就可以在子表中设计, 主表的作用就是拼接 sql 的.