我有两个表,即交易和账户。
事务表看起来像这样(标记的列是主键):
| 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 |
“帐户”表格如下所示:
| Name* | Liquidity |
+-------+-----------+
| A | 1 |
| B | 1 |
| C | 2 |
| D | 3 |
我想要实现的是汇总交易表中的金额,其中Credit是流动性为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 :(得分:0)
这个数组公式似乎符合要求。它以数组形式使用INDEX
,并通过乘以FALSE
(例如零或 0 )将任何不匹配的值归零。遗留的是总数。
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 + Shift + Enter↵进行最终确定。