2013-08-26 15 views
0

다음 시나리오가 있습니다.판매 테이블에서 누적 컬럼을 얻는 방법은 무엇입니까?

pid & 월은 복합 기본 키로 구성됩니다. 이제

pid month amount 
1 1  10 
2 2  15 
1 2  20 
1 3  10 
3 3  4 
2 3  6 

쿼리해야 이것이

pid month amount sum 
1 1  10  10 
2 2  15  15 
1 2  20  30 
1 3  10  40 
3 3  4  4 
2 3  6  21 

처럼 될 것입니다 테이블로 생성한다?

+1

SQL Server의 버전은 무엇입니까? – Taryn

+2

스택 오버플로에 오신 것을 환영합니다 .... 지금까지 시도한 것은 무엇입니까? 우리는 일반적인 질문을하는 정규 포럼이 아니며 우리 모두가 대답을합니다. 그러나 여기에 많은 사람들이 적어도 대답을 시도한 사람들을 도울 의지가 있습니다. – logixologist

답변

2

트릭 할 것이 쿼리 :

SELECT t1.*, sum(t2.amount) 
FROM Table1 t1 
INNER JOIN Table1 t2 ON t1.pid = t2.pid AND t1.month >= t2.month 
GROUP BY t1.pid, t1.month, t1.amount 

참조 SQLFIDDLE : http://www.sqlfiddle.com/#!3/db350/7/0

+1

작동! 고마워 Fabien – user2718853

+0

재귀 cte 사용할 수 있습니까? – user2718853

1

당신은 당신이 사용하는 SQL 서버의 버전을 지정하지 않았지만 당신이 어떤 버전의 누적 합계를 얻기 위해 다음을 사용할 수 있어야합니다 : SQL을 사용하는 경우

select t1.pid, 
    t1.month, 
    t1.amount, 
    (select sum(t2.amount) 
    from yourtable t2 
    where t1.pid = t2.pid 
    and t2.month <= t1.month) total 
from yourtable t1; 

SQL Fiddle with Demo

+0

작동하지 않습니다. 전체 열의 Null을 모두 가져옵니다. – user2718853

+0

@ user2718853 샘플 데이터 세트를 사용하면 작동합니다.이 데모를 참조하십시오. http://sqlfiddle.com/#!6/4b43a/6 – Taryn

+0

안녕하세요 Bluefeet 내 실수 그래, 잘 작동 괜찮아요 고마워요 – user2718853

2

를 참조하십시오 서버 2012 :

SELECT *,SUM(amount) OVER(PARTITION BY pid ORDER BY month ROWS UNBOUNDED PRECEDING)'Total' 
FROM YourTable 
+0

고맙지 만 SQL Server 2008에서 일하고 있었어요 – user2718853

관련 문제