2013-05-19 2 views
0
A  B  C  D  E  F G 
date  from  to  amount account  
5/5/2013 bank  food 200  bank  
5/5/2013 work  bank 1200 food 
5/5/2013 bank  rent 400  work 
5/5/2013 work  bank 1200 rent 

결과 F 란에 어떻게 잔액을 얻을 수 있습니까?계정 잔액 - Google 스프레드 시트 SQL 쿼리

그리고 가장 효과적인 옵션은 무엇입니까?

나는 합계와 나머지 값을 알고 있지만 F 열에 그들을 깔끔하게 집어 넣을 방법을 모른다. 얻기

in H1 
=QUERY(A1:D99,"select B, sum(D) where D > 0 group by B") 

in J1 
=QUERY(A1:D99,"select C, sum(D) where D > 0 group by C") 

: 나는이 만든

을 시도 무엇

H  I    J  K 
from sum Amount to  sum Amount 
bank 600   bank 2400 
work 2400   food 200 
         rent 400 

을 지금, K 휴식 경우 - 난을, 나는 균형을 얻을 수 있습니다. 그러나, 어떻게 대응하는 요소에 대해이 작업을 수행 할 수 있습니까? 나는 은행을 가진 은행을 의미한다. 이미 E2 아래에 나열된 계정이있는 경우

답변

1

, 당신은 F2이 배열 수식을 입력 할 수 있습니다

=ArrayFormula(IF(LEN(E2:E);SUMIF(C2:C;E2:E;D2:D)-SUMIF(B2:B;E2:E;D2:D);IFERROR(1/0)))

이 아마이 답변에 어떤 대안의 최상의 성능을 가질 것이다. 그러나 이미 채워지는 계정 이름에 의존합니다.

이 공식은 전체 테이블을 반환합니다

=ArrayFormula(QUERY(IF({1,0};TRANSPOSE(SPLIT(CONCATENATE(FILTER(B2:C;LEN(B2:B);LEN(C2:C))&CHAR(9));CHAR(9)));TRANSPOSE(SPLIT(CONCATENATE((FILTER(D2:D;LEN(B2:B);LEN(C2:C))*{-1,1})&CHAR(9));CHAR(9))));"select Col1, sum(Col2) group by Col1 label Col1 'Account', sum(Col2) 'Balance'";0))

그러나 옆을 끔찍하게 읽을 수있는에서, 이러한 유형 "다음 연결할 분할"공식 대용량 데이터 세트에 대한 정말 성능 저하가있을 수 있습니다.

function accountBalance(fromAccount, toAccount, amount) { 
    var result = [], output = [['Account', 'Balance']], from, to, value; 
    for (var i = 0; i < amount.length; i ++) { 
    from = fromAccount[i][0]; 
    to = toAccount[i][0]; 
    value = amount[i][0]; 
    if (from && to) { 
     if (!(from in result)) result[from] = 0; 
     if (!(to in result)) result[to] = 0; 
     result[from] -= value; 
     result[to] += value; 
    } 
    } 
    for (var j in result) { 
    output.push([j, result[j]]); 
    } 
    return output; 
} 

그리고 스프레드 시트 셀에, 당신이 호출 할 것입니다 : 그래서 나는 보통이 상황에서 사용자 지정 기능을 사용하는 것을 선호

=accountBalance(B2:B;C2:C;D2:D)

+0

좋은 것, 테스트합니다 – juanpastas