重复列值情况下的动态行转列

【问题】

名称      

参数

价格

日期

曲轴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 结果序表,结果如下:

imagepng