with test as(
select 1 id,'jack' name,3000 money,1 type from dual union all
select 2 id,'jack' name,150 money,1 type from dual union all
select 3 id,'kate' name,3500 money,1 type from dual union all
select 4 id,'kate' name,100 money,2 type from dual union all
select 5 id,'kate' name,100 money,2 type from dual union all
select 6 id,'tom' name,5000 money,1 type from dual union all
select 7 id,'tom' name,400 money,1 type from dual union all
select 8 id,'tom' name,100 money,2 type from dual union all
select 9 id,'tom' name,200 money,2 type from dual union all
select 10 id,'justin' name,100 money,2 type from dual union all
select 11 id,'justin' name,100 money,2 type from dual union all
select 12 id,'justin' name,200 money,2 type from dual )
select name,
       money1,
       money2,
       money1 - money2 poor,
       decode(money1, 0, 0, round((money1 - money2) / money1, 2))
  from (select name,
               sum(decode(type, 1, money, 0)) money1,
               sum(decode(type, 2, money, 0)) money2
          from test
         group by name)

解决方案 »

  1.   

    with test as(
    select 1 id,'jack' name,3000 money,1 type from dual union all
    select 2 id,'jack' name,150 money,1 type from dual union all
    select 3 id,'kate' name,3500 money,1 type from dual union all
    select 4 id,'kate' name,100 money,2 type from dual union all
    select 5 id,'kate' name,100 money,2 type from dual union all
    select 6 id,'tom' name,5000 money,1 type from dual union all
    select 7 id,'tom' name,400 money,1 type from dual union all
    select 8 id,'tom' name,100 money,2 type from dual union all
    select 9 id,'tom' name,200 money,2 type from dual union all
    select 10 id,'justin' name,100 money,2 type from dual union all
    select 11 id,'justin' name,100 money,2 type from dual union all
    select 12 id,'justin' name,200 money,2 type from dual )
    select name,
           money1,
           money2,
           money1 - money2 poor,
           decode(money1, 0, 0, round((money1 - money2) / money1, 2))
      from (select name,
                   sum(decode(type, 1, money, 0)) money1,
                   sum(decode(type, 2, money, 0)) money2
              from test
             group by name)我这只是个例子,如果是几千几万条难道还要写几千几万条数据么
      

  2.   

    with test as(
    select 1 id,'jack' name,3000 money,1 type from dual union all
    select 2 id,'jack' name,150 money,1 type from dual union all
    select 3 id,'kate' name,3500 money,1 type from dual union all
    select 4 id,'kate' name,100 money,2 type from dual union all
    select 5 id,'kate' name,100 money,2 type from dual union all
    select 6 id,'tom' name,5000 money,1 type from dual union all
    select 7 id,'tom' name,400 money,1 type from dual union all
    select 8 id,'tom' name,100 money,2 type from dual union all
    select 9 id,'tom' name,200 money,2 type from dual union all
    select 10 id,'justin' name,100 money,2 type from dual union all
    select 11 id,'justin' name,100 money,2 type from dual union all
    select 12 id,'justin' name,200 money,2 type from dual )
    select name,
           money1,
           money2,
           money1 - money2 poor,
           decode(money1, 0, 0, round((money1 - money2) / money1, 2))
      from (select name,
                   sum(decode(type, 1, money, 0)) money1,
                   sum(decode(type, 2, money, 0)) money2
              from test
             group by name)我这只是个例子,如果是几千几万条难道还要写几千几万条数据么
    你有几千万中type啊。。你看懂没,亲
      

  3.   

    你是不是不懂with到底什么意思。。
    我的也是举例子。。你用sql就完了,又没让你把所有数据拼接起来。。
    select name,
           money1,
           money2,
           money1 - money2 poor,
           decode(money1, 0, 0, round((money1 - money2) / money1, 2))
      from (select name,
                   sum(decode(type, 1, money, 0)) money1,
                   sum(decode(type, 2, money, 0)) money2
              from 换成你自己的表
             group by name)