咔片PPT · AI自动生成演示文稿,模板丰富、排版精美 讯飞智文 · 一键生成PPT和Word,高效应对学习与办公

背景介绍

Excel的透视是一个非常强大的功能。

假设有以下按照科目、项目、金额整理好的一张普通二维表格。

原始表格

用户可能会希望通过数据透视展现出另外的一种视角的效果。如下图所示:

数据透视表

可以看到实际上就是把原始数据的“项目”维度,提升到列维度上了,同时增加了合计的效果。

效果演示

在数据量较大、Excel单表无法承载的情况下,我们要如何基于数据库做出类似的效果呢?以下是一个可行的方法。语法基于MySQL的语法。

首先我们需要建一张表,假设就叫table_c吧。如下图所示:

承载原始数据的table_c表

接下来,就是见证奇迹的时刻:


类Excel透视效果

原理分析

实际上眼明的小伙伴一眼就看出来底层的原理了。这里还是再贴一下SQL,啰嗦几句。

select account_code, sum(case when project_code = 'RD1' then amount else 0 end) as 'RD1', sum(case when project_code = 'RD2' then amount else 0 end) as 'RD2', sum(amount) as '总计' from table_c group by account_code with rollup

SQL本身并不复杂核心是以下几点:

  1. group by的字段,对应的是透视表的行维度,例子中是“account_code”科目。
  2. case when里面的字段,对应的是透视表的列维度,例子中的是“project_code”项目。
  3. 里面的那个“amount”金额以及是用sum还是用count还是用其他,以及,对应的是透视表中的值维度以及对应的汇总公式。
  4. 列上的“总计”需要专门处理一下。
  5. 行上的“总计”,可以通过MySQL的with rollup实现,缺点是对应的account code值为,可以二次翻译一下。


第一次写工具文,希望对大家有所帮助,好了,就酱~