学习在于积累。
第一次发文,不妥之处,请见谅!
在查询中,往往会遇到多行相加的情况,如:
用于存储任务单当前状态的表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可实现拼接的方法,还望高手赐教,谢谢!