用Select union实现行列互转,简化公式设计
更新日期:2020年2月4日
客户需求:用户在用勤哲excel服务器设计模板时数据项定义不合理,把值定义成字段名了。现在需要把字段名转换成字段值,以便后面的表格调用。如下图所示例子:
东北,华北,华东定义成了三个字段,后面的表格需要作为地区字段下的三个值,也就是一行四列数据转成三行三列。
解决办法:
- 1、重新定义该模板的数据项,使用交叉表。这种情况如果是模板使用一段时间后发现问题,重新定义数据项意味着这个模板的数据全部要删掉重新录入。损失太大,无法接受!
- 2、有几个地区字段就定义几个表间公式,利用中间模板进行数据行列转置。设计复杂,还需要额外加模板,人工处理,无法接受!
- 3、利用Select union,定义个sql视图,实现自动转换。省事又完美,OK!
下面我们就讲讲如何实现,我们以地区销售表为例子:
第一步:地区销售表的设计如下图:
第二步,开启允许用户直接写sql视图定义选项。用管理员admin账号登陆客户端,点系统管理,点选项,勾选【允许用户直接写sql视图定义】后确定
第三步,点设计,点数据管理,点视图,点新建按钮
第四步,在视图名称里输入【收付款】,定义方式里选择【直接输入sql语句】,在下方空白处写如下语句:
select 产品名称, '东北' as 地区, 东北 as 数量 from 地区销售表_明细
union
select 产品名称, '华北' as 地区, 华北 as 数量 from 地区销售表_明细
union
select 产品名称, '华东' as 地区, 华东 as 数量 from 地区销售表_明细
注释:有几个地区的字段,就需要写几个select语句。From后面的是数据表名称,不是模板名。Select语句用union连接一起。
右键点击视图,选执行以下看看效果:
完美实现数据由列转行!学会此方法,再也不会因为前期数据项定义不合理而重新设计模版,甚至整个系统都推倒重来了。