;WITH CTE AS(
SELECT ROW_NUMBER()OVER(ORDER BY GETDATE())RN
,*
FROM TB
)
SELECT T1.a,T1.b,T1.c,T1.d,T1.e,SUM(T2.e)f
FROM CTE T1
JOIN CTE T2 ON T1.RN>=T2.RN
GROUP BY T1.a,T1.b,T1.c,T1.d,T1.e,T1.RN你这个累计是要求有顺序的,你却没有给这个顺序的列名

解决方案 »

  1.   

    ;WITH CTE AS(
    SELECT ROW_NUMBER()OVER(ORDER BY GETDATE())RN
    ,*
    FROM TB
    )
    SELECT T1.a,T1.b,T1.c,T1.d,T1.e,SUM(T2.e)f
    INTO #临时表
    FROM CTE T1
    JOIN CTE T2 ON T1.RN>=T2.RN
    AND T1.a = T2.a AND T1.b = T2.b
    AND T1.c = T2.c AND T1.d = T2.d
    GROUP BY T1.a,T1.b,T1.c,T1.d,T1.e,T1.RN
      

  2.   


    排序是根据 a  b   c组合一起排序的,我想要的是可以直接sql中查询得到  语句能直接运行查询么
      

  3.   

    Quote: 引用 2 楼 ky_min 的回复:

    ;WITH CTE AS(
    SELECT ROW_NUMBER()OVER(ORDER BY GETDATE())RN
    ,*
    FROM TB
    )
    SELECT T1.a,T1.b,T1.c,T1.d,T1.e,SUM(T2.e)f
    INTO #临时表
    FROM CTE T1
    JOIN CTE T2 ON T1.RN>=T2.RN
    AND T1.a = T2.a AND T1.b = T2.b
    AND T1.c = T2.c AND T1.d = T2.d
    GROUP BY T1.a,T1.b,T1.c,T1.d,T1.e,T1.RN[/quo
    或者说能否做到视图里面去,这样可以随时取用而不用每次语句运行之后查找
      

  4.   

    我说的顺序,是指,a b c d都相同的同组间的顺序方式,没有额外的列用来指定顺序吗以下这个可以直接查询,不用插入到临时表;WITH CTE AS(
        SELECT ROW_NUMBER()OVER(ORDER BY GETDATE())RN
            ,*
        FROM TB
    )
    SELECT T1.a,T1.b,T1.c,T1.d,T1.e,SUM(T2.e)f
    FROM CTE T1
        JOIN CTE T2 ON T1.RN>=T2.RN
    GROUP BY T1.a,T1.b,T1.c,T1.d,T1.e,T1.RN
      

  5.   


    有一个表
    a                      b                                   c                                   d
    2201         20150101001                0001                            10
    2201         20150101001                0002                            35
    2201         20150101001                0003                            45
    2202         20150101001                0001                            17
    2202        20150101001                 0002                             56
    2202        20150101001                 0003                             23
    所得到的表
    a                      b                                   c                                 d          e
    2201         20150101001                0001                          10          10
    2201         20150101001                0002                          35          45
    2201         20150101001                0003                          45          90
    2202         20150101001                0001                          17         17
    2202        20150101001                 0002                          56          73
    2202        20150101001                 0003                          23         96
    f列的数据为当a   b 一致时c为序号,当前行的e=当前行的d加上一行的e
      

  6.   

    就是用a和b加起来确定一组,然后用c来确定前一行后一行
      

  7.   

    ;WITH CTE AS(
        SELECT ROW_NUMBER()OVER(PARTITION BY a,b ORDER BY c)RN
            ,*
        FROM TB
    )
    SELECT T1.a,T1.b,T1.c,T1.d,SUM(T2.d)E
    FROM CTE T1
        JOIN CTE T2 ON T1.a=T2.a AND T1.b=T2.b AND T1.RN>=T2.RN
    GROUP BY T1.a,T1.b,T1.c,T1.d,T1.RN那你试试这个
      

  8.   

    貌似可以直接这样SELECT T1.a,T1.b,T1.c,T1.d,SUM(T2.d)E
    FROM TB T1
        JOIN TB T2 ON T1.a=T2.a AND T1.b=T2.b AND T1.c>=T2.c
    GROUP BY T1.a,T1.b,T1.c,T1.d