Как я могу создать сумму одного столбца в запросе в SQL?

У меня есть одна таблица с несколькими столбцами. Мне нужно создать запрос SQL для отображения определенных столбцов на основе пользовательского ввода из средства выбора даты и поля выбора. Я сделал это просто отлично. Тем не менее, мне нужно, чтобы один из столбцов результатов был в нижней части таблицы отображения. Я не могу понять, как создать результат в моем текущем запросе для отображения итогового столбца. По сути, я хотел бы, чтобы столбец WTTotal был объединен в отдельную ячейку. Мой текущий запрос ниже. Я действительно думаю, что это что-то простое, что я просто не могу видеть.

SELECT REPLACE(Client,',',' ') AS Client,WorkTicketNum,Lease,Date,OrderedBy,WTTotal
FROM WorkTicket
WHERE Date BETWEEN '2014-10-01' AND '2014-10-31' AND Invoiced IS NULL
ORDER BY Client

1

Решение

SELECT REPLACE(Client,',',' ') AS Client,WorkTicketNum,Lease,Date,OrderedBy,WTTotal
FROM WorkTicket
WHERE Date BETWEEN '2014-10-01' AND '2014-10-31' AND Invoiced IS NULL
ORDER BY Client
UNION ALL
SELECT 'Total', NULL, NULL, NULL, NULL, SUM(WTTotal)
FROM WorkTicket
WHERE Date BETWEEN '2014-10-01' AND '2014-10-31' AND Invoiced IS NULL;
5

Другие решения

Вы не можете получить это с помощью одного запроса. Положить SUM() в ваш запрос потребует GROUP BY Сложите и сверните все исходные строки результатов в одну строку результатов — это означает, что ваша таблица исчезнет. То, что вы хотите, это клиентское решение. например Запустите счетчик в вашем клиентском коде и вручную сложите результаты. В псевдоиш-коде:

$sum = 0;
while( $row = fetch_from_db() ) {
$sum += $row['field_to_sum'];
display_row();
}
echo "Total: $sum";
3

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

SELECT REPLACE(Client,',',' ') AS Client,WorkTicketNum,Lease,Date,OrderedBy, my_calculated_sum AS WTTotal
FROM WorkTicket
JOIN (SELECT SUM(whatever_you_want_to_sum) as my_calculated_sum FROM WorkTicket) subquery_alias
WHERE Date BETWEEN '2014-10-01' AND '2014-10-31' AND Invoiced IS NULL
ORDER BY Client

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

SELECT REPLACE(Client,',',' ') AS Client,WorkTicketNum,Lease,Date,OrderedBy, @sum_variable := @sum_variable + whatever_you_want_to_sum AS WTTotal
FROM WorkTicket
, (SELECT @sum_variable := 0) var_init_subquery
WHERE Date BETWEEN '2014-10-01' AND '2014-10-31' AND Invoiced IS NULL
ORDER BY Client

Но на самом деле решение Кевина очень хорошее.

0

У меня также есть решение, подобное Кевину:

;with cte_result
as
(
SELECT REPLACE(Client,',',' ') AS Client,WorkTicketNum,Lease,Date,OrderedBy,WTTotal
FROM   WorkTicket
WHERE  Date BETWEEN '2014-10-01' AND '2014-10-31' AND Invoiced IS NULL
)
select *
from   cte_result
union
select 'TotalAmount',NULL,NULL,NULL,NULL,sum(WTTotal)
from   cte_result
order  by client

но это решение будет работать, только если ваш DB Engine поддерживает CTE.
с помощью CTE мы можем использовать тот же набор результатов, чтобы получить итоговую строку.

0
По вопросам рекламы [email protected]