比如有一table 如下:
ID a
1 3
2 4
3 4
4 7
5 7
我现在想得到如下的效果
ID a  b
1 3  3
2 4  7
3 4  11
4 7  18
5 7  25就是b列是对a 依次累加
这个sql语句应该如何写??高手指教

解决方案 »

  1.   

    SELECT 
        ID,
        a,
        (SELECT SUM(a) FROM tb WHERE ID<=A.ID) AS b
    FROM tb AS A
      

  2.   

    create table tb(ID int,a int)
    insert into tb values(1 ,3 )
    insert into tb values(2 ,4 )
    insert into tb values(3 ,4 )
    insert into tb values(4 ,7 )
    insert into tb values(5 ,7 )
    goselect m.*, a + isnull((select sum(a) from tb where id < m.id),0) b from tb mdrop table tb/*
    ID          a           b           
    ----------- ----------- ----------- 
    1           3           3
    2           4           7
    3           4           11
    4           7           18
    5           7           25(所影响的行数为 5 行)
    */
      

  3.   

    create table aa(ID int ,a int)
    go
    insert aa select 1,3
    insert aa select 2,4
    insert aa select 3,4
    insert aa select 4,7
    insert aa select 5,7
    go
    select ID,a,(select sum(a) from aa where ID<=a.ID) b from aa  a
    go
    --结果
    /*
    ID  a   b
    1 3 3
    2 4 7
    3 4 11
    4 7 18
    5 7 25*/
      

  4.   

     
    select ID,a,(select sum(a) from Table where ID<=T.ID) b from Table  T
      

  5.   

    SELECT 
        ID,
        a,
        (SELECT SUM(a) FROM tb WHERE ID<=A.ID) AS b
    FROM tb AS A
      

  6.   


    create table tb(ID int,a int)
    insert into tb values(1 ,3 )
    insert into tb values(2 ,4 )
    insert into tb values(3 ,4 )
    insert into tb values(4 ,7 )
    insert into tb values(5 ,7 )
    --方法1-------------------------------------
    select m.*, a + isnull((select sum(a) from tb where ID < m.ID),0) b from tb m
    --方法2-------------------------------------
    select ID,a,(select sum(a) from tb where ID<=a.ID) b from tb  a
    --结果--------------------------------------
    ID      a       b
    -----   -----   -----
    1 3 3
    2 4 7
    3 4 11
    4 7 18
    5 7 25
      

  7.   


    --顺便练习一下APPLY的用法
    DECLARE  @t TABLE 
    (
    ID VARCHAR(10),
    a INT 
    )
    INSERT @t
    SELECT '1',3
    UNION ALL SELECT '2', 4
    UNION ALL SELECT '3', 4
    UNION ALL SELECT '4', 7
    UNION ALL SELECT '5', 7 
    SELECT * FROM @t t1 OUTER APPLY (SELECT SUM(ISNULL(a,0)) AS b FROM @t WHERE id<=t1.id) t2
      

  8.   

    我也来一个吧DECLARE @t TABLE(id VARCHAR(10),a INT )
    INSERT @t
    SELECT '1',3
    UNION ALL SELECT '2', 4
    UNION ALL SELECT '3', 4
    UNION ALL SELECT '4', 7
    UNION ALL SELECT '5', 7 select id, a, (SELECT SUM(ISNULL(a,0)) AS b FROM @t WHERE id<=t1.id) as b from @t t1
    /*
    (5 row(s) affected)
    id         a           b
    ---------- ----------- -----------
    1          3           3
    2          4           7
    3          4           11
    4          7           18
    5          7           25
    */