【问题】
| 名称 | 参数 | 价格 | 日期 |
| 曲轴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 结果序表,结果如下:

在Oracle 11G中处理行转列时遇到问题,当【价格】与【日期】相关联时,如何避免‘曲轴 A’的【价格】被SUM合并。解决方案提到使用SPL语言可以简化操作,通过执行SQL取数、按名称和日期排序,获取日期的distinct值,然后创建结果序表并将价格写入,从而保持价格不被合并。
686

被折叠的 条评论
为什么被折叠?



