动态列结果集

【问题】

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值