Выберите данные и сумму столбца для отдельного столбца в данных
У меня есть таблица вроде этого (есть клиенты, у которых есть некоторые платежи):
customerID Payments InvoicCode
1 1000 112
1 250 456
2 100 342
1 20 232
2 500 654
3 300 230
что я хочу, как ниже (сумма платежей клиентов в каждой строке):
customerID Payments InvoicCode SumPayment
1 1000 112 1270
1 250 456 1270
2 100 342 600
1 20 232 1270
2 500 654 600
3 300 230 300
Ответы
Ответ 1
Неправильная нормальная форма для дублирования данных с более широким охватом в нескольких строках. Подумайте о влиянии обновления платежа или добавлении нового платежа клиента - вам придется обновить все соответствующие итоговые значения для этого клиента.
Было бы проще создать представление/хранимую процедуру, которая даст вам итоговые значения во время выполнения, которые вы можете вызывать, когда вам это нужно:
create view CustomerTotals as
select customerID
,sum(Payments) as SumPayment
from mytable
group by customerID
Затем вы ссылаетесь на это с помощью select * from CustomerTotals
с выходом, например:
customerID SumPayment
1 1270
2 600
3 300
Ответ 2
Вот он:
SELECT t.customerID,
t.Payments,
t.InvoicCode,
aux.SumPayment
FROM tablename t
INNER JOIN
(SELECT customerID,
SUM(Payments) as SumPayment
FROM tablename
GROUP BY customerID) aux ON t.customerID = aux.customerID
Ответ 3
Попробуйте это, (в основном будет работать с любыми rdbms)
SELECT a.*, b. totalPayment
FROM paymentsTable a
INNER JOIN
(
SELECT customerID, SUM(Payments) totalPayment
FROM paymentsTable
GROUP BY customerID
) b ON a.customerID = b.customerID
Ответ 4
select t1.*,sumPay
from table t1,
(select customerID,sum(Payments) as sumPay
from table
group by customerID) t2
where t1.cutomerID=t2.customerID
Ответ 5
Вы можете создать представление или попробовать выбрать так:
SELECT customerID,
Payments,
InvoicCode,
(SELECT SUM(Payments)
FROM Customer IC
WHERE IC.customerID = OC.customerID )
FROM Customer OC
Ответ 6
Присоедините таблицу к самой суммируемой версии:
select mytable.customerID, Payments, InvoicCode, SumPayment
from mytable
join (select customerID, sum(Payments) as SumPayment from mytable group by 1) x
on x.customerID = mytable.customerID
Ответ 7
Вы можете использовать подзапрос, чтобы получить общую сумму, а затем присоединиться к этой таблице, чтобы добавить другие столбцы.
SELECT x2.customerID
, x2.payments
, x2.invoice
, x1.sumpayment
FROM
(
select customerID
,sum(Payments) as SumPayment
from yourtable
group by customerID
) x1
inner join yourtable x2
ON x1.customerID = x2.customerid
Смотрите SQL Fiddle with Demo
Ответ 8
Для MSSQL
SELECT Т1.*, Т2.SumPayment
FROM TableName T1 INNER JOIN
( SELECT customerId, SUM(Payments) SumPayment
FROM TableName
GROUP BY customerID
) T2 ON T1.customerID = T2.customerId
Ответ 9
Предполагая, что ваши dbms - это MS Sql-Server, вы можете использовать SUM(Payments)
с OVER
:
SELECT customerID, Payments,InvoicCode
,SumPayment=SUM(Payments)OVER(PARTITION BY customerID)
FROM t
SQL-Fiddle: http://sqlfiddle.com/#!3/2ac38/2/0
Ответ 10
SELECT
t.customerID as customerID,
t.Payments as Payments,
t.InvoicCode as InvoicCode,
total as SumPayment
FROM
theTable t,
(
SELECT customerId,
sum(Payments) as total
FROM theTable
GROUP BY customerId
) tmp
WHERE
tmp.customerId = t.customerId