重复列值情况下的动态行转列
【问题】
名称 |
参数 |
价格 |
日期 |
曲轴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 名称,日期 |
|
=A1.id(日期) |
||
3 |
=create(名称,参数,${A2.concat@c()}) |
|
4 |
for A1 |
>A3.record(A4.名称|A4.参数|(A2.pos(A4.日期)-1).(null)|A4.价格) |
A2:获取日期 distinct 值
A3:根据日期创建结果空序表
A4-B4:循环 A1,根据日期值将价格等写入 A3 结果序表,结果如下: