行列转换--两行相加

学习在于积累。

 

第一次发文,不妥之处,请见谅!

 

在查询中,往往会遇到多行相加的情况,如:

 

用于存储任务单当前状态的表A结构及数据如下:
number        state
T00002243  开发角度需求分析
T00002243  测试角度需求分析
T00002222  厂商接收
T00002221  厂商开发

 

想得到下面的结果:


T00002243  开发角度需求分析;测试角度需求分析
T00002222  厂商接收
T00002221  厂商开发

 

即,若任务单有多个状态,则拼接起来,中间用‘;’隔开.如何实现呢 ?

 

当同一个任务单的状态不多于两个(包含两个)时,我们可巧用max()与min()函数实现状态相加。方法如下:(注:本文数据库环境为oracle9i)

 

先根据任务单号number进行分组,分别用max()和min()函数得到这两个状态,然后再把它们连接起来即可。

 

sql示例如下:

 

 select number,case when max(state)!=min(state) then max(state)||';'||min(state) else max(state) end state
from A
group by number;

 

 

对于多于两行相加的情况,思索很久,未找到一个直接用sql可实现拼接的方法,还望高手赐教,谢谢!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值