2010-05-04 77 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。

相關問題