将逗号分隔的值拆分到多行
例题描述和简单分析
数据库中有 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/
牛呀牛呀
英文版