2010-05-04 79 views
0

我有一张名为费用的表格。有很多列,但涉及我的PHP页面的日期,spplierinv,金额。我创建了一个页面,列出了给定月份中的所有费用,并在最后汇总了它。但是,每行都有一个值,但许多行可能位于同一供应商发票上。这意味着将每行添加相同的supplierinv以获得与我的银行对帐单相同的总额。无论如何,我可以根据supplierinv获得总数。我的意思是说我有10排。 5在供应商4上,2在供应商5和3在供应商12上,怎么能得到3个数字(inv 4,5和12),总数在底部。非常感谢基于相同的值添加Postgres表格单元格

回答

1

您是否需要显示各个费用行以及所有总计?如果没有,你可以组由supplierinv列,总结的数额:

select supplierinv, sum(amount) as invoice_amount 
from expenses group by supplierinv 

,那么你可以简单地添加所有INVOICE_AMOUNT值的客户端来获取总计。

,如果你确实需要每个费用行,你可以做发票聚合客户端相当容易:

$invtotals = array(); 
$grand_total = 0; 
foreach (getexpenses() as $row) { 
    $supplierinv = $row['supplierinv']; 
    if (!array_key_exists($supplierinv, $invtotals)) { 
     $invtotals[$supplierinv] = 0; 
    } 
    $invtotals[$supplierinv] += $row['amount']; 
    $grand_total += $row['amount']; 
} 

另一种方法,如果你想显示表分成发票,是只保证

$grand_total = 0; 
$invoice_total = 0; 
$current_invoice = -1; 
foreach (getexpenses() as $row) { 
    if ($current_invoice > 0 && $current_invoice != $row['supplierinv']) { 
     show_invoice_total($current_invoice, $invoice_total); 
     $grand_total += $invoice_amount; 
     $current_invoice = $row['supplierinv']; 
     $invoice_total = 0; 
    } 
    $invoice_total += $row['amount']; 
    show_expense($row); 
} 
if ($current_invoice > 0) { 
    show_invoice_total($current_invoice, $invoice_total); 
    $grand_total += $invoice_amount; 
} 
show_grand_total($grand_total); 

您可以让数据库做聚合每个发票和总计像这样:

select date, supplierinv, amount, 
     sum(amount) over(partition by supplierinv) as invoice_amount, 
     sum(amount) over() 
from expenses 
结果由supplierinv然后命令

虽然你仍然需要做一些后处理来显示这个明智的,所以这并没有真正获得任何imho。

相关问题