2015-03-23 5 views
0

У меня есть две таблицы, транзакции и учетные записи.Агрегатирование значений с фильтрацией на основе значений в других таблицах

Сделки таблица выглядит следующим образом (выделенные столбцы являются первичными ключами):

| ID* | Date  | Amount | Debit | Credit | 
+-----+------------+--------+-------+--------+ 
| 1 | 03/11/2015 | $100 | B  | A  | 
| 2 | 03/12/2015 | $50 |  | A  | 
| 3 | 03/13/2015 | $400 | C  | A  | 
| 4 | 03/14/2015 | $200 | A  |  | 
| 5 | 03/14/2015 | $150 | D  | A  | 

И Accounts таблица выглядит следующим образом:

| Name* | Liquidity | 
+-------+-----------+ 
| A  |   1 | 
| B  |   1 | 
| C  |   2 | 
| D  |   3 | 

То, что я хочу достичь подытоживает суммы в транзакциях таблицах где «Кредит» - это имя учетной записи с «Ликвидностью» k, а дебет - либо пустой, либо имя учетной записи с лимитией k + 1 или выше. Для вышеуказанного случая, если k = 1, результат будет равен $ 50 (строка 2) + $ 400 (строка 3) + $ 150 (строка 5) = $ 600.

Если бы SQL, то запрос будет выглядеть следующим образом:

select sum(amount) 
from transactions 
where credit in (select name from accounts where liquidity = 1) 
    and (debit is null or 
     debit in (select name from accounts where liquidity > 1)) 

Или это:

select sum(amount) 
from transactions 
left join accounts as c on transactions.credit = c.name 
left join accounts as d on transactions.debit = d.name 
where c.liquidity = 1 and (d.liquidity is null or d.liquidity > c.liquidity) 

На самом деле мне также нужно отфильтровать строки по времени (в частности, в месяц), но я думаю, что это будет легко.

Как это сделать в Excel? Я пытался использовать SUMIFS с VLOOKUP, но я не могу заставить его работать. У меня много учетных записей, поэтому вручную перечисление всех критериев для SUMIFS не является вариантом.

ответ

0

Эта формула формула, кажется, соответствует счету. Он использует INDEX в форме массива и обнуляет любые значения, которые не совпадают, умножая на FALSE (например, ноль или). То, что осталось, суммируется как итог.

SUM across INDEX with criteria

Формула массива в I9 есть,

=SUM(INDEX($C$2:$C$99*($E$2:$E$99=G9)*(IF($D$2:$D$99="", 1, SUMIF($G$2:$G$5, $D$2:$D$99, $H$2:$H$5)>H9)), ,)) 

Формула массива должна быть завершена с Ctrl + Сдвигом + Enter↵.

Смежные вопросы