有表Aid  money
1    300
1    200
2    500
3    400
3    600我想更新这张表让 id=1 的总和为30
应得到:
id  money
1    30
1    0
2    500
3    400
3    600怎么写SQL........

解决方案 »

  1.   

    UPDATE A 
    SET MONEY=30
    WHERE ID=1 AND MONEY=300UPDATE A 
    SET MONEY=0
    WHERE ID=1 AND MONEY=200
      

  2.   

    update tb set money=15 where id=1
      

  3.   

    上午看了一些javascript的帖子,全都看不懂,真不知道他们从哪学的,郁闷。
      

  4.   

    UPDATE A 
    SET MONEY=30 
    WHERE ID=1 AND MONEY=300 UPDATE A 
    SET MONEY=0 
    WHERE ID=1 AND MONEY=200 
      
    你这样写是死的
    更本就不是行只是为了的到结果而写死
      

  5.   

    id  money 
    1    30 
    1    0 
    2    500 
    3    400 
    3    600 
    后面还有个ID  1   值是0
    你的意思是  把300  变成30  和  0?
      

  6.   

    我有一张库存表id     money
    1001    50
    1001    100
    1002    400
    现在1001的库存出库了90,那1001还剩下的库存就应该为60也就是id     money
    1001    60
    1001    0
    1002    400
      

  7.   

    create table A(id int,money int)
    insert into A
    SELECT 1001    ,50 
    UNION
    SELECT 1001    ,100 
    UNION
    SELECT 1002    ,400 
    GOSELECT * FROM ADECLARE @NUM INT,@RNUM INT
    DECLARE @ID INT,@MONEY INTSET @NUM=90
    SET @RNUM=@NUM
    declare t_cursor  cursor for 
    select id,MONEY 
    FROM A
    WHERE ID=1001  
    ORDER BY MONEY OPEN t_cursor
    FETCH NEXT FROM t_cursor INTO @id, @MONEY
    WHILE @@FETCH_STATUS = 0
    BEGIN
    SELECT @id, @MONEY

    SELECT @RNUM SET @RNUM=@RNUM-@MONEY IF(@RNUM>0)
    BEGIN
    UPDATE A SET MONEY=0 WHERE ID=@id AND MONEY=@MONEY
    END
    ELSE
    BEGIN
    UPDATE A SET MONEY=ABS(@RNUM) WHERE ID=@id AND MONEY=@MONEY 
    END
    -- 
    FETCH NEXT FROM t_cursor INTO @id, @MONEY
    END
    CLOSE t_cursor
    DEALLOCATE t_cursorGOSELECT * FROM AGO
    drop table a
    GO
      

  8.   

    create table A(id int,money int)
    insert into A
    SELECT 1001    ,50 
    UNION
    SELECT 1001    ,100 
    UNION
    SELECT 1002    ,400 
    GOSELECT * FROM ADECLARE @NUM INT,@RNUM INT
    DECLARE @ID INT,@MONEY INTSET @NUM=90
    SET @RNUM=@NUM
    declare t_cursor  cursor for 
    select id,MONEY 
    FROM A
    WHERE ID=1001 
    ORDER BY MONEY OPEN t_cursor
    FETCH NEXT FROM t_cursor INTO @id, @MONEY
    WHILE @@FETCH_STATUS = 0
    BEGIN
    --  SELECT @id, @MONEY
    -- 
    --  SELECT @RNUM
    -- 
    SET @RNUM=@RNUM-@MONEY IF(@RNUM>0)
    BEGIN
    UPDATE A SET MONEY=0 WHERE ID=@id AND MONEY=@MONEY
    END
    ELSE
    BEGIN
    UPDATE A SET MONEY=ABS(@RNUM) WHERE ID=@id AND MONEY=@MONEY 
    END
    -- 
    FETCH NEXT FROM t_cursor INTO @id, @MONEY
    END
    CLOSE t_cursor
    DEALLOCATE t_cursorGOSELECT * FROM AGO
    drop table a
    GO忘记屏蔽调试了,接分!
      

  9.   

    UPDATE A SET MONEY=ABS(@RNUM) WHERE ID=@id AND MONEY=@MONEY (此处还是会有问题的,如出现2个ID=1001,money=50相同的时候就会更新错误)建议表中加一个GUID,默认newid(),利用此字段在游标中来进行更新