복붙노트

[SQL] OVER SUM ()를 사용하여 SQL 서버 2008 (ORDER BY ...)

SQL

OVER SUM ()를 사용하여 SQL 서버 2008 (ORDER BY ...)

나는 CTE를 사용하려고하고 CROSS 결과 집합 가입하세요. 나는 현재 행에 이르기까지의 4 개 행을 요약하고 싶다. 예 온라인 나는 CTE를 만 새로 만든 테이블 (http://sqlandme.com/2011/08/17/sql-server-denali-over-rows-range/)를 사용하지 않습니다 발견했다. 구문은 작동해야하지만 오류가 " 'ROWS'근처의 구문이 잘못되었습니다"라는 얻을.

예제 출력은 다음과 같은 성명을 사용하여이 될 것입니다 : SUM (Y)의 합계 OVER (ORDER BY는 PRECEDING ROWS 4 X)

X Y SUM

     1          7     0     No prev rows, so sum is 0
     2          1     7     Sum   = 7 
     3          2     8           = 1 + 7
     4          5     10          = 2 + 1 + 7
     5          7     15          = 5 + 2 + 1 + 7
     6         34     15          = 7 + 5 + 2 + 1
     7         32     48          = 34 + 7 + 5 + 2

사람이 쿼리에 잘못된 것에 대한 어떤 제안이 있습니까? 미리 감사드립니다.

with quarterResults as (
      <subquery in here>
)

--COLUMN1: String
--COLUMN2: Date
--COLUMN3: Date
--COLUMN4: Double
select a.TIC, a.DATADATE, a.EFFDATE, SUM(b.valuei) OVER (ORDER BY a.TIC, a.DATADATE, a.EFFDATE ROWS 4 PRECEDING) AS [SUM]
from quarterResults a
cross join quarterResults b
where a.datadate > b.datadate
group by a.tic, a.datadate, a.EFFDATE, a.valuei
order by a.TIC, a.datadate

해결법

  1. ==============================

    1.당신이 행에 대해 발견 된 문서는 / 범위는 SQL Server 2008 용 아니다 - 그것은 SQL Server의 이후 버전입니다.

    당신이 행에 대해 발견 된 문서는 / 범위는 SQL Server 2008 용 아니다 - 그것은 SQL Server의 이후 버전입니다.

    SQL 2008에서 쿼리를 수행하기 위해 하나의 접근 방식은 유사 할 것입니다 :

    SELECT a.TIC, a.datadate, a.effdate, x.s
    FROM quarterResults a
        CROSS APPLY (   SELECT ISNULL(SUM(v), 0)
                        FROM (  SELECT TOP(4) b.valuei
                                FROM quarterResults b
                                WHERE b.datadate < a.datadate
                                ORDER BY b.datadate DESC ) x(v)
                    ) x(s)
    ORDER BY a.TIC, a.datadate
    

    이 잠재적으로 비싼 쿼리입니다 있습니다. 행 오버 표현의 사용은 아마 다시는 SQL 서버 2008에서 사용할 수 없습니다, 더 효율적일 수 있지만 것입니다.

  2. ==============================

    2.당신은 2008 SQL 서버 태그.

    당신은 2008 SQL 서버 태그.

    구문은 데날리 일명 다음 버전 SQL 서버 2012까지 준비되어 있지 않습니다

  3. from https://stackoverflow.com/questions/7652511/sql-server-2008-using-sum-overorder-by by cc-by-sa and MIT license