DataSet实现分组,合并

数据库中有以下数据
ID USER_NM SUBJECT SCORE
1 张三 语文 90
2 小明 语文 89
3 李四 语文
99
4 小明 数学 87
5 张三 数学
67
6 李四 数字
89
7 张三 英语 87
8 小明 英语
89
9 李四 英语
77


需要实现以下效果

1.合并单元格

序号
姓名
学科 成绩
1
张三 语文 90
数学 67
英语 87
2
李四

88
数学
99
英语
66

3

小明
89
数学
76
英语
89

不可取的是:先查出所有用户,再遍历用户列表,根据用户查询成绩,需要4次查询

利用DataSet可以实现一次查询

DataSet set = service.query("成绩表");

DataSet groups = set.group("USER_NM");

执行后groups中有3行用户信息,每行用户信息中包括一个成绩集合


实际环境中通常是用户有单独的一个表,并且查询时需要分组,这时需要两次查询实现

1.分页查询用户

DataSet users = service.query("用户表", config(true));

2.根据用户ID区间查询成绩

DataSet scores = service.query("成绩表", "USER_ID:>="+users.getMinId("USER_ID"), "USER_ID:<="+users.getMaxId("USER_ID"));

3.将成绩分配到对应的用户

users.dispatchItem(scores,"ID:USER_ID"); //类似于SQL关联条件中的WHERE USER.ID = SCORE.USER_ID

执行后,每行用户信息中包含一个成绩集合

其他文档