8.10 多表关联的动态行转列

 

相互关联的多个表进行动态行转列,根据字段值动态生成多列,然后将关联查询的数据填入。
根据学生表、成绩表和补考成绩表,计算每位学生的各科成绩、总成绩和补考成绩的汇总表。

imagepng

汇总表形式如下图:

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 的序表中