순번 |
일자 |
지출 |
잔액 |
1 |
2016.01.30 |
500 |
9500 |
2 |
2016.06.12 |
800 |
9200 |
3 |
2016.09.10 |
1500 |
8500 |
4 |
2017.01.05 |
2000 |
2000 |
5 |
2017.06.03 |
-900 |
10900 |
위의 모양을 아래의 모양으로 바꾸고 싶은데..
어떻게 해야 할지 모르겠네요...
순번 |
일자 |
지출 |
잔액 |
1 |
2016.01.30 |
500 |
9500 |
2 |
2016.06.12 |
800 |
8700 |
3 |
2016.09.10 |
1500 |
7200 |
4 |
2017.01.05 |
2000 |
5200 |
5 |
2017.06.03 |
-900 |
6100 |
잔액이 10000원에서 시작해서 지출을 더하고 빼고 해주는 건데....
도움좀 부탁드리겠습니다.
Comment 4
-
Terry
2016.03.15 06:51
-
아싸라비아콜롬비아
2016.03.15 09:43
감사합니다.
그런데 이런거 할려면 어떤 부분을 공부해야 하나요???
매번 물어보는것도 그렇고 한데...
어떤식으로 봐야 하는지 감이 안잡혀서...
자꾸 묻게 되네요....
-
이리
2016.03.15 10:00
쿼리만 보고 가져다 쓰시면 발전하기 어렵습니다.
머리속으로 생각을 해보시고 손으로 한번 그려보세요
그리고 실제 쿼리문 작성하면서 생각한것처럼 나오는지 다르게 나오면 왜 다르게 나오는지 고민해보시면 도움이 될 거 같습니다.
-
Terry
2016.03.15 10:59
이리님이 덧글을 잘 달아주셨네요^^
해당 게시물의 질문내용을 토대로 말씀드릴께요.
일단 제가 유추한 순서는 하기와 같습니다.
1.행위가 일어난 순서는 '순번' 이라는 컬럼으로 알 수 있다..( Ascending )
2. 1번 순번부터 순차적으로 뺄셈(덧셈) 이 이루어져야 한다..(전체 잔액 기준 )
3. 해당 테이블(제가 덧글로 작성한 쿼리 기준 tblA ) 의 1번 순번은 항상 가지고 오고
해당 값은 지출+잔액 으로 한다.. ( 만원 기준이라고 하셨으니, 1번 순번의 지출+잔액 = 10000 )
4. 필요한 값 =
-1) 원시 데이터
-2 )원시 데이터 순번보다 작거나 같은거 (지출금액 합산을 위한 )
-3) 순번이 1인 데이터
5. 산식을 세움
-> 3)의 지출 + 3)의 잔액 = 최초잔액 = A로 칭함
-> 2)의 지출합산 = 누적 지출합계 = B로 칭함
-> 누적잔액 = A - B
-> 원래의 데이터 형태와 동일하게 맞추기 위해, 원시데이터 tblA 필요 = C로 칭함
6. 5의 값들을 엮어줌.. ( SQL 에서 엮는다는건 기본적으로 JOIN 입니다. )
7. 엮어준 값들을 토대로 QUERY 작성
8. 데이터가 최종 원하는 출력물 형태와 동일한지 검증
SQL 로 말 그대로 STRUCTURED QUERY LANGUAGE ..
사용되는 구문만 다를뿐 C,C#,VB,.NET,JAVA,PB,DELPHI,PHP 와 유사한
LANGUAGE 입니다..
;with tblA(순번,일자,지출,잔액) As
(
Select 1,'2016.01.30',500,9500 Union All
Select 2,'2016.06.12',800,9200 Union All
Select 3,'2016.09.10',1500,8500 Union All
Select 4,'2017.01.05',2000,2000 Union All
Select 5,'2017.06.03',-900,10900
)
Select
a.순번
,a.일자
,a.지출
,MAX(c.지출) + MAX(c.잔액) - IsNull(SUM(b.지출),a.지출) As 잔액
From tblA a
Left Outer Join
tblA b
On a.순번 >= b.순번
Left Outer Join
tblA c
On c.순번 = 1
Group By a.순번
,a.일자
,a.지출
,a.잔액