动态列结果集

【问题】

Table1

imagepng

Table2

imagepng

I need to make output like this

imagepng

imagepng

【回答】

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 的分组必须伴随聚合。