本帖最后由 yljyljyljylj 于 2010-11-24 17:28:39 编辑

解决方案 »

  1.   

    当然相同id的a字段算作一个
    算的一个取哪个呢?随便取一就行吗?
      

  2.   

    id相同的话,a字段肯定是对应相同的数据,随便取一个就是了,我这里的MAX()就是想着随便取一个了,都一样的。只是我这种写法的思路是不是有问题,反正是达到目的,这个SQL该怎么写呢?
      

  3.   

    直接根据id和b来分组求和不就行了吗?还是另外别的含义?
    sum(a)over(partition by id,b)
      

  4.   

    select t.id,t.a,t.b,t.x,t.y,t.z,t.datee,sum(t.a)over(partitiotn by id,b order by b,id) from 
    (
    select id, a, b, x, y, z, datee,row_number()over(partition by id order by a) rn from tableName
    ) t where t.rn = 1
      

  5.   

    id a b x y z date ...
    select b,sum(a)
    from (select distinct b,a,id
    from tb)
    group by b
      

  6.   

    select b,sum(a)
    from (select id,b,a,row_number() over(partition by b,id order by a) rn
    from tb)
    where rn=1
    group by b
      

  7.   


    select t.b ,sum(t.a) from  
    (
    select id, a, b, x, y, z, datee,row_number()over(partition by id order by a) rn from tableName
    ) t where t.rn = 1 group by t.b
      

  8.   

    这的会提示“不是GROUP BY 表达式”
      

  9.   

    6楼和8楼是一样的,是可以得到结果的,可是只能选择 b, sum(a).如果select里加入x,y,z这些字段,就会提示“不是GROUP BY 表达式”。必须改成类似 max(x),max(y)这类的分组函数才行,有办法可以不加这无意义的max吗?
      

  10.   

    你这不是矛盾吗?你既然按照b分组,如果是b分组下有两个不同的x,你叫oracle怎么去做选择呢?
    要不你还继续按照x,y,z也分组。还不你就采用4楼的办法。。