日期:2014-05-17  浏览次数:20915 次

sql实现按照序号奇数、偶数生成新结果集
原始表结果:
人员编号 序号 项目 价格 单位 数量  
 0001 01 内容1 1价格 1
 0001 02 内容2 2.. 2
 0001 03 内容3 3.. 3
 0001 04 内容4 4.. 4
 0001 05 内容5 5.. 5

 0002 01 内容1 1.. 10
 0002 02 内容2 2.. 20
...
需要效果
人员编号 序号 项目 价格 单位 数量 序号 项目 价格 单位 数量  
 0001 01 内容1 1价格 1 02 内容2 2 2
 0001 03 内容3 3价格 3 04 内容4 4 4
 0001 05 内容5 5价格 5 无值补空...

 0002 01 内容1 1价格 10 02 内容2 2.. 20
...
对2取余,奇数列放在左边,偶数列放在右边,两边不平衡补空,如何解决,谢谢!

------解决方案--------------------
SQL code
select  人员编号,max(decode(mod(to_number(序号),2),0,序号,null) 序号1,
        max(decode(mod(to_number(序号),2),0,项目,null) 项目1,
        max(decode(mod(to_number(序号),2),0,价格,null) 价格1,
        max(decode(mod(to_number(序号),2),0,单位,null) 单位1,
        max(decode(mod(to_number(序号),2),0,数量 ,null) 数量 1,
        max(decode(mod(to_number(序号),2),1,序号,null) 序号2,
        max(decode(mod(to_number(序号),2),1,项目,null) 项目2,
        max(decode(mod(to_number(序号),2),1,价格,null) 价格2,
        max(decode(mod(to_number(序号),2),1,单位,null) 单位2,
        max(decode(mod(to_number(序号),2),1,数量 ,null) 数量 2
from  表名
group by 人员编号,trunc(to_number(序号)/2)

------解决方案--------------------
SQL code
select  人员编号,max(decode(mod(to_number(序号),2),0,序号,null) 序号1, 
    max(decode(mod(to_number(序号),2),0,项目,null) 项目1,
    max(decode(mod(to_number(序号),2),0,价格,null) 价格1,
    max(decode(mod(to_number(序号),2),0,单位,null) 单位1,
    max(decode(mod(to_number(序号),2),0,数量 ,null) 数量 1,
    max(decode(mod(to_number(序号),2),1,序号,null) 序号2,
    max(decode(mod(to_number(序号),2),1,项目,null) 项目2,
    max(decode(mod(to_number(序号),2),1,价格,null) 价格2,
    max(decode(mod(to_number(序号),2),1,单位,null) 单位2,
    max(decode(mod(to_number(序号),2),1,数量 ,null) 数量 2
from  表名
group by 人员编号,trunc((to_number(序号)-1)/2)


上面的分组有点错误