【问题】
名称 | 参数 | 价格 | 日期 |
曲轴A | 中 | 4.3 | 5.1 |
曲轴A | 中 | 4.2 | 5.1 |
外护 | 高 | 7 | 5.3 |
齿轮 | 7齿 | 10 | 5.5 |
请问一下,在oracle11G中,如果用函数把【日期】 字段进行转列的话,【价格】作为交叉值的情况下,如何能让”曲轴 A”的【价格】不进行 sum 计算呢?现在我行转列之后,【价格】变成了 8.5 ,曲轴 A 合并成了一行。
【回答】
这是一个动态行转列的问题,用 SQL 实现很麻烦,不过用 SPL 就很简单了,写法如下:
A | B | |
1 | $select 名称,参数,价格,日期 from tb order by 名称,日期 | |
2 | =A1.id(日期) | |
3 | =create(名称,参数,${A2.concat@c()}) | |
4 | for A1 | >A3.record(A4.名称|A4.参数|(A2.pos(A4.日期)-1).(null)|A4.价格) |
A1:执行 SQL 取数,并按名称、日期排序
A2:获取日期 distinct 值
A3:根据日期创建结果空序表
A4-B4:循环 A1,根据日期值将价格等写入 A3 结果序表,结果如下: