Q&A

  • '매출 - 입금 = 잔액' 잔액을 일괄적으로 업데이트 하고 싶은데...Help Me
*제가 도스용 프로그램을 윈도우로 옮기는 작업을 하는데,
문제가 생겼습니다.
아래와 같이 매출전표가 있을 때 일괄적으로 잔액을 정리를 해야 되는데
아래와 같이 코딩을 하면 한 레코드씩 업데이트 될 줄 알았는데,
고객NO 가 '2'인 모든 자료가 같은 값(2000)으로 업데이트 되었습니다.

[?]제 생각에 각 레코드별로 구분지을 수 있는 일련번호가 있음 쉽게 가능하겠는데,
[?]현 DB를 수정하지 않고 '정상적인결과'를 얻고 싶은데,
   어떻게 해야 될지 도무지 알 수가 없네요.

-----------------------------------------------------
while not qrSel.eof do begin
  x := qrsel('판매가')
  y := qrsel('입금')
  
  case 구분 of
  1: tmp := tmp + x;
  2: tmp := tmp - y;
  end

  update set 잔액 = tmp  where CustNo = 2;

  qrSel.next;
end;
-----------------------------------------------------


위와 같이 코딩 했을 때 발생 결과
---------------------------------------------------
고객NO |구분| 상품NO | 판매가 | 입금 | 잔액 |
---------------------------------------------------
2         | 1   | a1       |  1000  |        | 2000 |
2         | 1   | b2       |  3000  |        | 2000 |
2         | 1   | a3       |  4000  |        | 2000 |
2         | 2   | 입금     |            |8000| 2000 |


정상적인 결과
------------------------------------------------------
고객NO |구분| 상품NO | 판매가 | 입금  | 잔액 |
------------------------------------------------------
2         | 1    | a1       |  1000  |        | 1000 |
2         | 1    | b2       |  3000  |        | 4000 |
2         | 1    | a3       |  4000  |        | 8000 |
2         | 2    | 입금     |            |8000| 2000 |
2  COMMENTS
  • Profile
    nilriri™ 2005.11.03 04:37
    누적합을 계산하는거 같은데..

    잔액 필드를 별도로 마련해서 작업하시는 건가요?

    그럼 중간 날짜의 금액이 바뀌면 그 뒤 모든 자료의 잔액을 다시 계산하실??? -_-  

    상당히 이해가 안가는 프로세스 입니다..ㅡㅡ;


    display 시점에서 직접 계산해주는 방법을 찾아보심이..^^

    레포트라면  quick같은경우..sum() 함수를 이용하시면 되구요..


    그냥 그리드라고 해도.. 변수하나 선언해서 집계내가면서..calc컬럼에 넣어주시고. display하시면 될듯...

    그럼..


  • Profile
    무심코 2005.11.02 23:09
    답변을 드리기 앞선 전제조건을 말씀드리겠습니다
    1. DB 는 오라클 이라고 가정을 했습니다!
    2. 정상적인 경우 마지막 잔액이 2000원인데 이해가 안됩니다!
        (제 생각에는 "0" 이라고 생각이 드는데!)

    오라클 8i 부터 LAG, LEAD 라고 해서 이전레코드 값을 구해 올수 있습니다.
    예) selelct 판매액, 입금액, 잔액, LAG(잔액,1,0) OVER(order by rownum) 잔액1 from 전표

    위 함수와 rowid, rownum, decode 을 적절히 이용하면서 Update 쿼리문으로 해결 할수 있다고 보여지네요!