8.7 定位赋值法行转列

 

定位赋值行转列,动态生成新序表数据结构,最后根据行列位置直接赋值。
根据用户记录,动态生成用户列,统计用户每周在线情况。根据相互关联的用户表和记录表中,汇总统计 2018 年每周用户的活动情况:

User
ID
Name
Record
ID
Date

想要显示 2018 年每周用户是否有活动的记录,如下表:

Week User1 User2 User3
1 Yes No Yes
2 Yes Yes No
3 Yes No Yes
4 No Yes Yes

先创建目标数据结构,再往里面填数据。

脚本:

A
1 =connect(“db”).query@x(“select t1.ID as ID, t1.Name as Name, t2.Date as Date from User t1, Record t2 where t1.ID=t2.ID and year(t2.Date)=2018”)
2 =A1.derive(interval@w(“2018-01-01”,Date)+1:Week)
3 =A2.group(ID)
4 =A2.max(Week)
5 =A4.new(~:Week,${A3.(“"No":”+Name).concat@c()})
6 =A3.run(~.run(A5(Week).field(A3.#+1,“Yes”)))

A1:查询用户表和记录表,按用户 ID 连接。
A2:根据日期计算出周序号,存放在新字段 Week。
A3:按照用户 ID 进行分组。
A4:找到最大的周序号。
A5:根据最大的周序号创建一个空序表,赋予缺省值 "No"。
A6:每组每条数据,通过周序号在目标表中定位到对应记录,替换该用户值为 "Yes"。