一、需求
需求很简单就是统计行政区划下各类企业的总数,行政区划下没有企业也要展示,分类企业没有的也要展示,行政区划字典、分类企业字典在同一张字典表(就是为了关联查出名称)里面,业务表结构见下:
二、假设有10个行政区划,那么返回给前台就是10条数据,后台数据类型就是List<实体(或者Map)>,
实体里面的属性为{
行政区划:北京,
A类企业数量:1,
B类企业数量:2,
C类企业数量:3,
D类企业数量:4
},所以针对这种返回结果去写sql。
再观察业务表,发现企业类别就一列,只能根据行政区划统计出各区划下的企业总数。所以我们要转化一下,将企业类别当作列。
SELECT ACC_AREA "行政区划",
sum( case REPORT_INDUSTRY WHEN '7058dcb912c446e8b20f8816815fc817' then 1 else 0 end ) "A类企业数量",
sum( case REPORT_INDUSTRY WHEN '85444e5d49b44149acf006011731f837' then 1 else 0 end ) "B类企业数量",
sum( case REPORT_INDUSTRY WHEN 'afaa8e81c8e14e5d97553cf5b797485f' then 1 else 0 end ) "C类企业数量",
sum( case REPORT_INDUSTRY WHEN 'c58524a6681a4c9d826b7ff8860cea68' then 1 else 0 end ) "D类企业数量"
FROM test GROUP BY ACC_AREA
然后用上面这个结果关联字典表得到行政区划的中文名称,这个简单就不写了。这里最让我疑惑的是,如果case when多怎么办,我这里企业类别比较少,还好。如果有那种很多的咋办,写几十个case when?欢迎大家探讨