У меня есть две таблицы, транзакции и учетные записи.Агрегатирование значений с фильтрацией на основе значений в других таблицах
Сделки таблица выглядит следующим образом (выделенные столбцы являются первичными ключами):
| 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 не является вариантом.