2014-08-30 114 views
4

我有一个表是这样的:条件的总和(SUMIF)的组织表

#+NAME: ENTRY 
|------+--------| 
| Item | Amount | 
|------+--------| 
| A | 100 | 
| B |  20 | 
| A | 120 | 
| C |  40 | 
| B |  50 | 
| A |  20 | 
| C |  16 | 
|------+--------| 

,然后我需要总结每个项目在另一张表:

#+NAME: RESULT 
|------+-----| 
| Item | Sum | 
|------+-----| 
| A | 240 | 
| B | 70 | 
| C | 56 | 
|------+-----| 

我已经尝试使用vlookup和远程引用在这张表中,但我不能总结如下产生的列表:

#+TBLFM: $2=vsum((vconcat (org-lookup-all $1 '(remote(ENTRY,@[email protected]>$1)) '(remote(ENTRY,@[email protected]>$2))))) 

但它没有给出答案。

所以我必须用一个占位符来保存,然后在结果列表概括:

#+NAME: RESULT 
|------+--------------+-----| 
| Item | Placeholder | Sum | 
|------+--------------+-----| 
| A | [100 120 20] | 240 | 
| B | [20 50]  | 70 | 
| C | [40 16]  | 56 | 
|------+--------------+-----| 
#+TBLFM: $2='(vconcat (org-lookup-all $1 '(remote(ENTRY,@[email protected]>$1)) '(remote(ENTRY,@[email protected]>$2))))::$3=vsum($2) 

有没有更好的解决方案呢?要做到这一点

回答

2

一种方法是不vsum

#+TBLFM: $2='(apply '+ (mapcar 'string-to-number (org-lookup-all $1 '(remote(ENTRY,@[email protected]>$1)) '(remote(ENTRY,@[email protected]>$2))))) 

如果你想使用计算功能,您可以随时使用calc-eval

#+TBLFM: $2='(calc-eval (format "vsum(%s)" (vconcat (org-lookup-all $1 '(remote(ENTRY,@[email protected]>$1)) '(remote(ENTRY,@[email protected]>$2))))))