实际数据使用中会遇到一些报表数据中的某个列包含汇总信息,例如下表中,每个task会对应一个assignee列,这一列中可能会有多个users,代表当前任务分给了多个人员负责。此时如果想知晓某个员工都被分配了多杀个task时,就无法用当前表单直接获取。
要解决该问题,就要有一张“一个task一个user的”的数据表,按照这个思路,需要先将assignee列进行拆分,之后再对数据进行逆透视(Unpivot)。
拆分很简单,可以直接利用查询编辑器中的拆分功能进行。
拆分完成后,选择Task列,之后点击unpivot other columns对数据进行逆透视,就可以获取一个task对一个user的表单。
数据重新整理之后,就可以到report页面创建一个表显示每个user分配到的工作任务情况。很简单的几部就轻松的把单列汇总信息进行了拆分,重新获得另外角度的聚合数据。
CREATE TABLE T5 (idnum NUMBER,f1 NUMBER(10,5),f2 NUMBER(10,5),f3 NUMBER(10,5),e1 NUMBER(10,5),e2 NUMBER(10,5),h1 NUMBER(10,5),h2 NUMBER(10,5));
INSERT INTO T5 (IDNUM,F1,F2,F3,E1,E2,H1,H2) VALUES (1,
create table t_demo(id int,name varchar(20),nums int); ---- 创建表
insert into t_demo values(1, '苹果', 1000);
insert into t_demo values(2, '苹果', 2000);
insert into t_demo values(3, ...
CREATE TABLE T5 (idnum NUMBER,f1 NUMBER(10,5),f2 NUMBER(10,5),f3 NUMBER(10,5),e1 NUMBER(10,5),e2 NUMBER(10,5),h1 NUMBER(10,5),h2 NUMBER(10,5));
INSERT INTO T5 (IDNUM,F1,F2,F3,E1,E2,H1,H2) VALUES (1...
Oracle的
UNPIVOT
操作可以将多
列
数据转换为单
列
数据。下面是一个例子:
假设我们有一个表,其中包含以下
列
:ID、NAME、SALES_Q1、SALES_Q2、SALES_Q3、SALES_Q4。我们想要将SALES_Q1、SALES_Q2、SALES_Q3和SALES_Q4
列
转换为单个SALES
列
,并将其与季度相关联。我们可以使用
UNPIVOT
操作来实现这一点。
```sql
SELECT ID, NAME, QUARTER, SALES
FROM (SELECT ID, NAME, SALES_Q1, SALES_Q2, SALES_Q3, SALES_Q4
FROM sales_table)
UNPIVOT
(SALES FOR QUARTER IN (SALES_Q1, SALES_Q2, SALES_Q3, SALES_Q4));
在上面的查询中,我们首先选择ID、NAME、SALES_Q1、SALES_Q2、SALES_Q3和SALES_Q4
列
。然后,我们使用
UNPIVOT
操作将SALES_Q1、SALES_Q2、SALES_Q3和SALES_Q4
列
转换为单个SALES
列
,并将其与季度相关联。最后,我们选择ID、NAME、QUARTER和SALES
列
。