2014-04-07 3 views
0

내 표 (BOB)은 다음과 같이이다 :합계 값이 다른 테이블에 추가

Year  Month Value 
2010   1  100 
2010   2  100 
2010   3  100 
2010   4  100 
2010   5  100 
내가 다른 테이블에 YTD 값을 추가 할

(BOB2)

더 정확히를 I

Year  Month Value 
2010   1  100 
2010   2  200 
2010   3  300 
2010   4  400 
2010   5  500 
+0

서식을 사용하여 장난감을 즐겁게 주시겠습니까? 테이블이 어떻게 보이는지 알기가 어렵습니다. 잘못했을 때를 대비하여 편집하고 싶지 않습니다. – Coderchu

답변

0

음과 같은 BOB 2 표를보고 싶어, 나는 ...... 나는 당신이 뭘 하려는지 이해 생각하지만,하지 않을 경우, 다시 문구 귀하의 질문에 ... 당신은 당신이 사용하여 질문 한 내용을 수행 할 수 있습니다하시기 바랍니다 다음 SQL.

--INSERT INTO BOB2 (Year, ID, Value) 
SELECT a.Year, a.ID, (SELECT SUM(b.Value) 
       FROM BOB b 
       WHERE b.ID <= a.ID) as RunningTotalValue 
FROM BOB a 
ORDER BY a.Value; 

여기는 당신이 볼 수있는 SQLFiddle입니다.

편집 : 게시물을 수정 한 후 ID 열을 "월"로 변경하십시오.

+0

SQL 쿼리에서 select를 열로 중첩하는 것은 좋지 않은 방법입니다. 행이 데이터베이스에서 선택 될 때마다 행당 또 다른 쿼리를 수행해야합니다. 성능 악몽에 빠지기 위해 조인을 활용해야합니다. –

+0

@ Ryan-Neal Mes ... 팁 주셔서 감사합니다. 내가 작성한 저장된 procs 중 일부를 다시 살펴보아야합니다. 한숨 – Mike

0

아래 답변을 참조하십시오. 쿼리를 단순화했습니다.

select 
    concat(cast(t1.year as char), cast(t1.month as char)) period_current,    
    sum(t1.amount) amount 
from bob t1 

    left join bob t2 on 
    (t2.year + t2.month) <= (t1.year + t1.month) 
group by 
    (t1.year + t1.month); 

후 현재 금액을 포함하여 그 이전 금액을 합계를 어떤 쿼리가 기본 테이블로 T1을 사용 기간 (년 + 월)에 합류하고있다. 나는 모든 엣지 경우에 추가하지는 않았지만 이것은 당신에게 뭔가를 제공합니다. 쿼리를 1 년으로 제한한다면 충분할 것입니다.

관련 문제