Добавление ячеек таблицы Postgres на основе того же значения - PullRequest
0 голосов
/ 04 мая 2010

У меня есть таблица расходов. Есть много столбцов, но те, которые включены в мою страницу php, являются date, spplierinv, amount. Я создал страницу, которая перечисляет все расходы за данный месяц и подводит итоги в конце. Тем не менее, каждая строка имеет значение, но многие строки могут быть в одном и том же счете-фактуре поставщика. Это означает добавление каждой строки с одним и тем же supplierinv, чтобы получить итоговую сумму согласно моей банковской выписке. Есть ли в любом случае я могу получить общее количество строк на основе supplierinv. Я имею в виду, сказать, у меня есть 10 строк. 5 о поставщике 4, два о поставщике 5 и 3 о поставщике 12, как получить 3 цифры (инв. 4, 5 и 12) и общий итог внизу. Большое спасибо

1 Ответ

1 голос
/ 04 мая 2010

Вам нужно показать отдельные строки расходов, а также все итоги? Если нет, вы можете сгруппировать по столбцу 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'];
}

другой подход, если вы хотите показать таблицу разделенной на счета-фактуры, это просто убедиться, что результаты упорядочены поставщикомinv, а затем:

$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

хотя вам еще нужно выполнить некоторую постобработку, чтобы отобразить это разумно, так что в действительности это ничего не дает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...