는 순서를 보장하는 것하지만 최종 답변 확인을 함께 제공하지 않습니다
select
x.STUDENT_NAME
, sum(y.marks) marks
from
SCORE_CHART x
join SCORE_CHART y
on x.STUDENT_NAME <= y.STUDENT_NAME
group by x.STUDENT_NAME
order by x.STUDENT_NAME
그냥 NO 규칙을 JOINS 것 - 다시 생각합니다
편집 - 확인을 지금 실행 : LIVE FIDDLE HERE
데이터
CREATE TABLE "SCORE_CHART"
(
"STUDENT_NAME" NVARCHAR(20),
"MARKS" INT
)
INSERT INTO SCORE_CHART (STUDENT_NAME, MARKS)
VALUES
('STUD1', 95),
('STUD2', 90),
('STUD3', 98)
0,123,516 만들기 재귀 CTE를 사용
:
;WITH
init_cte(row,STUDENT_NAME,MARKS)
AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY STUDENT_NAME),
STUDENT_NAME,
MARKS
FROM SCORE_CHART
)
,MinMax_cte(MinRow,MaxRow) AS (SELECT MIN(row),MAX(row) FROM init_cte)
,recursive_cte (row,STUDENT_NAME,MARKS,RUNNING_MARKS) AS
(
SELECT row,STUDENT_NAME,MARKS,MARKS
FROM init_cte
WHERE row = (SELECT MinRow FROM MinMax_cte)
UNION ALL
SELECT Y.row,y.STUDENT_NAME,y.MARKS,x.RUNNING_MARKS + y.MARKS
FROM recursive_cte x
INNER JOIN init_cte y
ON y.row = x.row + 1
WHERE y.row <= (SELECT [MaxRow] from MinMax_cte)
)
SELECT * FROM recursive_cte
당신에게 의견에서 언급 한 바와 같이 영업 이익 샘 사프란 UPDATE
를 사용하여 실행중인 총 일을 매우 우아한 방법을 제시 그 질문에 비슷한 질문 HERE ON SO 있다.그냥 같은 테이블에 가입하여
는 누적 합계를 얻을 수 있습니다 :이 시도
CREATE TABLE #t (ROW int, STUDENT_NAME NVARCHAR(20) , MARKS int, MARKS_RUNNING int)
INSERT INTO #t
SELECT
ROW_NUMBER() OVER (ORDER BY STUDENT_NAME),
STUDENT_NAME,
MARKS,
0
FROM SCORE_CHART
DECLARE @total int
SET @total = 0
UPDATE #t SET marksrunning = @total, @total = @total + MARKS
SELECT * FROM #t
예상되는 결과를 볼 수 없습니다 (직장에서 차단됨). 텍스트 기반 예제를 게시 할 수 있습니까? 첫 행 누적 합계에 대한 – Codingo
은 초당 95, 185 및 세 번째 283이어야합니다. – TechDo