将逗号分隔的值拆分到多行

例题描述和简单分析

数据库中有 ORDERS 表,包含两个字段:ORDERNAME和 LEVEL,如下:

ORDERNAME

LEVEL

order1

First,Second,Third

order2

Forth,Fifth,Sixth

将逗号分隔的 LEVEL 值拆分到多行,结果如下:

ORDERNAME

LEVEL

order1

First

order1

Second

order1

Third

order2

Forth

order2

Fifth

order2

Sixth

解法及简要说明

在集算器中编写脚本 p1.dfx,如下所示:


A

1

=connect("demo")

2

=A1.query@x("SELECT   * FROM ORDERS")

3

=A2.news(LEVEL.split@c();ORDERNAME,~:LEVEL)

简要说明:

A1  连接数据源名称为 demo 的数据库

A2  执行 SQL,返回查询结果所组成的序表,结束时自动关闭数据库连接

A3  循环 A2 每行,把 LEVEL 按逗号拆分成序列,按每个序列成员转变成一个新行,新行由 2 列组成:第 1 列是 ORDERNAME,第 2 列是拆分出的序列的当前成员 (~ 表示),命名为 LEVEL

BIRT集成这段代码的方法可参考:《BIRT如何调用 SPL 脚本》

问答搜集

https://www.eclipse.org/forums/index.php/t/1099133/