具体需求是:A表,字段 a1   ,   a2   ,   a3   ,    a4
                          数据 01   ,    2   , 地方 ,    10
                                 01   ,    2    , 地段 ,    20
                                 02    ,   2    , 地段 ,    20
                                 03    ,   3    , 地的 ,    30
希望结果:           ‘分类’ ,   2   ,   3
                                   01     ,   30  ,   0
                                   02     ,   20  ,   0
                                   03     ,    0   ,  30
说明:按a1列分类,将 a2 进行行转成列 ,其中难点是A表中a2的值是不固定的。可能是如,2、3、4;3、4、5;2、3、7等

解决方案 »

  1.   

    --如果你a2不只是2,3 那要用过程,1楼的链接 好好看看
    with tb as(
    select '01' a1,2 a2,'地方' a3,10 a4 from dual union all
    select '01',2,'地段',20 from dual union all
    select '02',2,'地段',20 from dual union all
    select '03',3,'地的',30 from dual)--以上为提供数据
    select a1,sum(decode(a2,2,a4,0)) "2",
    sum(decode(a2,3,a4,0)) "3"
    from tb
    group by a1A1          2          3
    -- ---------- ----------
    01         30          0
    02         20          0
    03          0         30
      

  2.   

    我用存储过程,动态组装SQL解决了。