对字符串中数据进行分类统计
例题描述和简单分析
数据库中有 SURVEY 表,包含两个字段:QID 和 ANSWERS,如下:
QID |
ANSWERS |
1 |
A|B|A|C|D|E|A|E|C|D |
2 |
A|C|E|D|A|E|D|B|E|D |
3 |
C|D|E|A|B|C|A|C|E|A |
4 |
E|E|B|A|D|B|C|A|B|D |
5 |
D|A|C|B|E|A|B|D|D|A |
6 |
A|C|A|C|C|E|D|B|E|C |
7 |
E|B|A|A|A|B|A|C|D|D |
8 |
B|C|D|C|C|E|C|A|C|A |
9 |
B|C|A|E|E|B|A|A|D|E |
需要对 ANSWERS 中的数据进行分类统计,结果如下:
QID |
ANSWER |
NUM |
1 |
A |
3 |
1 |
B |
1 |
1 |
C |
2 |
1 |
D |
2 |
1 |
E |
2 |
2 |
A |
2 |
2 |
B |
1 |
… |
… |
… |
解法及简要说明
在集算器中编写脚本 p1.dfx,如下所示:
A |
|
1 |
=connect("demo") |
2 |
=A1.query@x("SELECT * FROM SURVEY") |
3 |
=A2.news(ANSWERS.split("|");QID,~:ANSWER) |
4 |
=A3.group(QID,ANSWER;count(~):NUM) |
简要说明:
A1 连接数据源名称为 demo 的数据库
A2 执行 SQL,返回查询结果所组成的序表,结束时自动关闭数据库连接
A3 循环 A2 每行,把 ANSWERS 按 "|" 拆分成序列,按每个序列成员转变成一个新行,新行由 2 列组成:第 1 列是 QID,第 2 列是拆分出的序列的当前成员 (~ 表示),命名为 ANSWER
A4 按 QID,ANSWER 分组,统计每组中的数据条数
BIRT集成这段代码的方法可参考:《BIRT如何调用 SPL 脚本》。
英文版