表 A  ODR    ODR_SPEC     DANJIA     SUU      NUM     NUM2       TEL      TEL2  p0001      1          100       10       ddd      rrr      155       3333      p0001      2          200       10       eee      rrt      144       3663   p0002      1          200       10       fff      rrr      155       3333   p0002      2          300       10       ffw      ddd       4        444  p0003      1          150       10       ddd      rrr      155       3333   p0003      2          30       10        ddd      rrr      155       3333 我要得到 ODR 一样的时候的 DANJIA 之合,   ODR    ODR_SPEC     DANJIA     SUU      NUM     NUM2       TEL      TEL2  p0001      1          300       10       ddd      rrr      155       3333      p0001      2          300       10       eee      rrt      144       3663   p0002      1          500       10       fff      rrr      155       3333   p0002      2          500       10       ffw      ddd       4        444  p0003      1          180       10       ddd      rrr      155       3333   p0003      2          180       10        ddd      rrr      155       3333 这个sql 最有效率的方法写的话?

解决方案 »

  1.   

    select A.ODR,B.DANJIA,ODR_SPEC,SUU,NUM,NUM2,TEL,TEL2 From A inner Join (select ODR,sum(DANJIA) as DANJIA from A group by ODR)B on a.ODR=b.ODR
      

  2.   

    SELECT t1.ODR,t1.ODR_SPEC,t2.DANJIA,t1.SUU,t1.NUM,t1.NUM2,t1.TEL,t1.TEL2 FROM A t1,
    (select ODR,sum(DANJIA) DANJIA from A GROUP BY ODR) t2 WHERE t1.ODR=t2.ODR
    这个sql没有测试过,楼主可以试一下。思路通过构造一个计算好单价的子查询做联合查询。
      

  3.   

    select count(t.DANJIA) from A t group by t.ODR
      

  4.   

    发个奇怪的 但是测试过能用select o1,sum(d1+d2) from (select odr as o1,danjia as d1 from boss_a),(select odr as o2,danjia as d2 from boss_b) where o1 = o2 group by o1
      

  5.   


    select A.ODR_SPEC as ODR_SPEC,(A.DANJIA+B.DANJIA)as NEW_DANJIA from A inner Join B on A.ODR_SPEC = B.ODR_SPEC
      

  6.   

    内连,当A表和B表同时都有ODR_SPEC时才出结果要A表的ODR_SPEC有还B表没或B表有而A表没的用这个select A.ODR_SPEC as ODR,(A.DANJIA+B.DANJIA)as sum from A,B where A.ODR_SPEC = B.ODR_SPEC
      

  7.   

    select odr,sum(danjia) from A group by odr
      

  8.   

    select sum(DANJIA) as DANJIA from A group by ODR
      

  9.   

    SELECT a.odr, a.odr_spec, b.danjia, a.suu, a.num, a.num2, a.tel, a.tel2
      FROM TEST a,(select odr,sum(danjia) danjia from test  group by odr) b
      where a.odr = b.odr
      

  10.   

    select sum(t.DANJIA) from A t group by t.ODR
      

  11.   

    wait LZ,一张表还是二张,odr是不是关键字
      

  12.   

    。我晕死,是一张表,后面是需要的结果是什么数据库?
    如果是oracle,那么这个问题很简单:
    select ODR,
           ODR_SPEC,    
           sum(DANJIA) over(partition by odr) DANJIA,    
           SUU,      
           NUM,
           NUM2,
           TEL,
           TEL2
    from   A;over窗口函数在db2和sqlserver中也有,用法基本相似。