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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【问题】

名称      参数价格日期
曲轴A   中   4.3  5.1
曲轴A4.25.1
外护      高   75.3
齿轮        7齿  105.5

请问一下,在oracle11G中,如果用函数把【日期】 字段进行转列的话,【价格】作为交叉值的情况下,如何能让”曲轴 A”的【价格】不进行 sum 计算呢?现在我行转列之后,【价格】变成了 8.5 ,曲轴 A 合并成了一行。

【回答】

这是一个动态行转列的问题,用 SQL 实现很麻烦,不过用 SPL 就很简单了,写法如下:

AB
1$select 名称,参数,价格,日期 from tb order by 名称,日期
2=A1.id(日期)
3=create(名称,参数,${A2.concat@c()})
4for   A1>A3.record(A4.名称|A4.参数|(A2.pos(A4.日期)-1).(null)|A4.价格)

A1:执行 SQL 取数,并按名称、日期排序

A2:获取日期 distinct 值

A3:根据日期创建结果空序表

A4-B4:循环 A1,根据日期值将价格等写入 A3 结果序表,结果如下:

imagepng

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值