表A分类号      金额          数量
01.00       00.00         0                 更新后该行金额为500.00,数量为46
01.01       100.00        10
01.02       200.00        21
01.03       200.00        15
02.00       00.00         0                 更新后该行金额为475.00,数量为37
02.01       130.00        12
02.02       122.00        10
02.03       123.00        10
02.04       100.00        5
03.00……
现在要求更新分类号末位为00的行,值为该类的汇总
即如果该行分类号为01.00
更新该行金额值为 sum(金额) from 表A where 分类号 like '01.%'
更新该行数量值为 sum(数量) from 表A where 分类号 like '01.%'
依此类推到02.00,03.00……不知道能不能用简单的语句实现。
谢谢各位!

解决方案 »

  1.   

    update tb
    set 
    金额=(select sum(金额) from tb where left(分类号,len(分类号)-2)=left(a.分类号,len(a.分类号)-2) ),
    数量=(select sum(数量) from tb where left(分类号,len(分类号)-2)=left(a.分类号,len(a.分类号)-2) )
    from tb a
    where right(分类号,2)='00'
      

  2.   

    update a set 金额=(select sum(金额) from 表a as b where left(b.分类号,3)=left(a.分类号,3) and right(分类号,2)<>'00')
                 数量=(select sum(数量) from 表a as b where left(b.分类号,3)=left(a.分类号,3) and right(分类号,2)<>'00')
    from 表a as a
    where right(分类号,2)='00'
      

  3.   


    CREATE TABLE T_PRICE
    (
       SORT_NO CHAR(5),
       MONEY_1 MONEY,
       QTY INT)insert into T_PRICESELECT '01.00',       00.00,         0       UNION ALL        --  更新后该行金额为500.00,数量为46
    SELECT '01.01',       100.00  ,      10 UNION ALL
    SELECT '01.02',       200.00  ,      21 UNION ALL
    SELECT '01.03',       200.00,        15 UNION ALL
    SELECT '02.00',       00.00 ,        0   UNION ALL            ---  更新后该行金额为475.00,数量为37
    SELECT '02.01',       130.00 ,       12  UNION ALL
    SELECT '02.02',       122.00,        10 UNION ALL
    SELECT '02.03',       123.00,        10 UNION ALL
    SELECT '02.04',       100.00,        5 
    UPDATE T_PRICE  
    SET T_PRICE.QTY =
    ( SELECT SUM(B.QTY) FROM  T_PRICE B 
      WHERE  LEFT(LTRIM(T_PRICE.SORT_NO),2) =LEFT(LTRIM(B.SORT_NO),2)
      GROUP BY LEFT(LTRIM(B.SORT_NO),2)
    ),
     T_PRICE.MONEY_1 =
    ( SELECT SUM(B.MONEY_1) FROM  T_PRICE B 
      WHERE  LEFT(LTRIM(T_PRICE.SORT_NO),2) =LEFT(LTRIM(B.SORT_NO),2)
      GROUP BY LEFT(LTRIM(B.SORT_NO),2)
    )FROM T_PRICE  
    WHERE RIGHT(RTRIM(T_PRICE.SORT_NO),2) = '00'
     
      

  4.   

    这样也许更好:UPDATE T_PRICE  
    SET T_PRICE.QTY =
    ( SELECT SUM(B.QTY) FROM  T_PRICE B 
      WHERE  LEFT(LTRIM(T_PRICE.SORT_NO),2) =LEFT(LTRIM(B.SORT_NO),2)
      AND  RIGHT(RTRIM(B.SORT_NO),2) <> '00'
    ),
     T_PRICE.MONEY_1 =
    ( SELECT SUM(B.MONEY_1) FROM  T_PRICE B 
      WHERE  LEFT(LTRIM(T_PRICE.SORT_NO),2) =LEFT(LTRIM(B.SORT_NO),2)
        AND  RIGHT(RTRIM(B.SORT_NO),2) <> '00'
    )
    FROM T_PRICE  
    WHERE RIGHT(RTRIM(T_PRICE.SORT_NO),2) = '00'