DataSet实现分组,合并
最后更新:2023-10-18 21:25:16
|
状态:未完成
数据库中有以下数据
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
执行后,每行用户信息中包含一个成绩集合