8.10 多表关联的动态行转列
相互关联的多个表进行动态行转列,根据字段值动态生成多列,然后将关联查询的数据填入。
根据学生表、成绩表和补考成绩表,计算每位学生的各科成绩、总成绩和补考成绩的汇总表。
汇总表形式如下图:
stu_id | stu_name | Chinese_score | Math_score | total_score | Chinese_retest | Math_retest |
---|---|---|---|---|---|---|
1 | Ashley | 80 | 77 | 157 | ||
2 | Rachel | 58 | 67 | 125 | 78 | |
3 | Emily | 85 | 56 | 141 | 82 |
脚本:
A | B | |
---|---|---|
1 | $()select t1.stu_id stu_id,t1.stu_name stu_name,t2.subject subject,t2.score score1,t3.score score2 from Students.txt t1 left join Exam.txt t2 on t1.stu_id=t2.stu_id left join Retest.txt t3 on t1.stu_id=t3.stu_id and t2.subject=t3.subject order by t1.stu_id,t2.subject | |
2 | =A1.group(stu_id) | =A1.group(subject) |
3 | =create(stu_id,stu_name,${(B2.(~.subject+“_score”)|“total_score”|B2.(~.subject+"_retest")).concat@c()}) | |
4 | >A2.run(A3.record([stu_id,stu_name]|B2.(~(A2.#).score1)|A2.~.sum(score1)|B2.(~(A2.#).score2))) |
A1 将学生表、成绩表和补考成绩表关联取数,按学号和科目排序,考试成绩为 score1,补考成绩为 score2
A2、B2 将取出的成绩表分别按学号和科目分组。
A3 根据科目动态产生列名,创建结果序表。
A4 循环分组后的学生成绩,计算出结果动态拼接在一起,添加到 A3 的序表中