动态列结果集
【问题】
Table1
Table2
I need to make output like this
【回答】
SQL 无法直接生成变动列数的结果集,需要拼出动态 SQL 再执行,而且后续分组统计的代码也很复杂。这种情况下用 SPL 就相当简单,脚本如下:
A |
|
1 |
=myDB1.query("select t1.ID ID,t1.Prob Prob,t1.Cost Cost,t1.Visible Visible,t2.Count Cnt,t2.Iteml Iteml from table2 as t2 left join table1 t1 on t1.ID=t2.ID") |
2 |
=A1.group(ID) |
3 |
=A2.max(~.count()).("Itml"+string(~)+","+"Cnt"+string(~)).concat@c() |
4 |
=create(ID,Prob,Cost,Visible,${A3}) |
5 |
>A2.(A4.record([ID,Prob,Cost,Visible]|~.([Iteml,Cnt]).conj())) |
A1 先用 join 连接两个表
A2 将连接后的新表根据 ID 分组
A3 动态拼出列名,即“Itml1,Cnt1,Itml2,Cnt2,Itml3,Cnt3,Itml4,Cnt4”。
A4 动态创建二维表。
A5 则将 A2 的每组数据向 A4 动态插入记录。
对于此类问题,SPL 的优势在于可先分组而不聚合,但是 SQL 的分组必须伴随聚合。