动态列转置

【问题】

Hi Guys,

I need to convert the data like below by using Actuate.

Either in iob level or Report level. Kinldy help us to achieve this. 

Source


col1, col2

1,10

1,20

1,30

2,10

2,40

3,70

3,60

3,10

Target


col1,  col2,   col3,   col4,  col5

 1       10       20       30     40

 2       10       40

 3       70       60       10

【回答】

这是行转列的问题,使用存储过程实现比较复杂,用 SPL 实现就比较简单了,代码如下:


A

1

$select col1,col2 from tb

2

=A1.group(col1)

3

=create(${(A2.max(~.count())+1).("col"+string(~)).concat@c()})

4

>A2.run(A3.record(~.col1|~.(col2)))


A1:执行 SQL 取数

A2:按 col1 分组

A3:根据“每组最大记录数 +1”建立空表

A4:循环每组数据,向空表追加数据,完成转置。

其实常见的实际业务中,多以 col2 中的值作为新二维表的列名(而不是 col1,col2 这种无意义的名字),更多转置运算可参考【集算器实现 SQL 转置的通用方法】。