2011-03-01 4 views
1

재무 트랜잭션이 포함 된 테이블이있는 Sqlite 데이터베이스가 있습니다. 적절한 열은 날짜, PO # 및 차변 및 대변 금액입니다. 이 트랜잭션을 표시하고 임의의 시작 잔액 (항상 첫 번째 레코드)을 기반으로 누적 합계를 계산해야합니다. Sqlite 데이터베이스에서 누적 합계 필요

나는이 쿼리를 기반으로 뷰 생성 :

SELECT t1.[ID], t1.[Date], t1.[PO], t1.[Debit], t1.[Credit], 
     (SELECT SUM(t2.[Credit]) - SUM (t2.[Debit]) 
     FROM [Transaction] t2 
     WHERE t2.[ID] <= t1.[ID]) AS [Balance] 
FROM [Transaction] t1 

을하고 그것을 작동합니다. 문제는 때로는 날짜 및/또는 PO 번호로 주문해야하며 때가되면 잔액 열 값이 올바른 반면 주문이 잘못되었습니다. 또한 날짜별로 필터링해야하므로 Transaction 테이블에서 계산 된 열을 사용할 수 있다고 생각하지 않습니다.

ROWID 값을 사용했지만 변경 사항은 없습니다. 내가 아는 한 Sqlite는 ROW_NUMBER() OVER()을 지원하지 않는다. 나는 며칠 동안이 일을 행운으로 내 머리를 감싸려고 노력했다.

이 .NET Compact Framework 응용 프로그램 인 Sqlite ADO.NET 버전 1.0.66 (Sqlite 엔진의 버전이 확실하지 않음)입니다.

+1

은행 데이터베이스에서 균형을 유지하는 가장 좋은 방법은 [각 거래 후 잔액을 기록하는] 것입니다 (http://yourcodeisshowing.wordpress.com/2011/01/19/the-bankers-database/). – MPelletier

+1

나는 동의하지 않는다. 트랜잭션 테이블을 업데이트하기 위해 트리거를 사용하는 방법에 대해서는 언급했지만 다른 방법은 알지 못합니다. 이제 Google에 더 많은 시간을 맞춰보세요. –

+0

거래 테이블에 잔액 필드가있는 경우 각 거래가 끝나면 잔액을 업데이트 할 방아쇠가있을 것입니다. – MPelletier

답변

1

솔루션은 실제로 테이블에 잔액 필드를 추가하고 레코드 추가/편집/삭제시 트리거를 통해 업데이트했습니다. 내 실제 질문은 순조로운 방법을하는 것이 아니라 MPelletier가 제안한 은행원 데이터베이스였던 일을하기위한 최선의 방법이었습니다. this thread에서 필요한 트리거의 예를 발견했습니다. 약간의 조정을 통해 필자는 필요한 것을해야했습니다. 결과적으로, 유일한 목적은 누적 합계에 대한 것이기 때문에 더 이상보기가 필요하지 않습니다.

관련 문제