【题目要求】
数据库中有一张地区数据统计表,但是并不规则 ,记录类似于,225100:02:3:20160725是一串代码,以:分割,第1位为地区代码,第2位为分类代码,第3位为数量,第4位为日期
地区代码含义225100-上海 225200-江苏 225300-浙江 为可能有某些位不存在,缺位时计算规则如下:
1、地区缺位时不参与统计
2、时间缺位时按20151220来计算
数据如下
现要求输入开始日期和结束日期后,自动统计这个时间段内每个地区和各个分类下的数据情况。日期控件中输入的日期格式要求为yyyy-MM-dd
【数据来源】考试数据库wubmh0及chq3g4表
【效果图参考】
其中使用的是SQLite数据库,需要编写分隔符列转行语句:
with split(id,splid,idsstr) as
(select id,'',part||';' from chq3g4 UNION ALL SELECT id,substr(idsstr, 0, instr(idsstr, ';')),substr(idsstr, instr(idsstr, ';')+1)FROM split WHERE idsstr!=''
)
SELECT t1.cityid,t1.city,t2.tp,t2.num,t2.dy
FROM wubmh0 t1
left join (select splid,id,case when substr(splid,-1) <>':' then substr(splid,-8,4)||'-'||substr(splid,-4,2)||'-'||substr(splid,-2) else'2015-12-20' end as dy,substr(splid,1,6) as city,substr(splid,8,2) as tp,case when substr(splid,11,instr(substr(splid,10),":"))=":" then 0 else substr(splid,11,instr(substr(splid,11),":")-1) end as numfrom splitwhere splid != '' ) t2
on t1.cityid=t2.city
where dy between '${start}' and '${end}';
后面排版就很容易了