10

私はこのようなテーブルを持っています(それぞれがいくらかの支払いをしている合計の顧客がいます):

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
4

10 に答える 10

5

スコープの広いデータを複数の行に複製することは、適切な通常の形式ではありません。支払いを更新したり、新しい顧客の支払いを追加したりすることの影響について考えてください。その顧客に関連するすべての合計を更新する必要があります。

実行時に合計を提供するビュー/ストアドプロシージャを作成する方が簡単です。この合計は、必要なときにいつでも呼び出すことができます。

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
于 2012-08-27T14:15:33.333 に答える
5

ここにあります:

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
于 2012-08-27T14:18:05.153 に答える
4

これを試してください(ほとんどの場合、すべての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

SQLFiddleデモ

于 2012-08-27T14:19:57.707 に答える
3
select t1.*,sumPay
from table t1,
(select customerID,sum(Payments) as sumPay
 from table
 group by customerID) t2
where t1.cutomerID=t2.customerID
于 2012-08-27T14:16:28.243 に答える
3

ビューを作成するか、次のように選択を試すことができます。

SELECT customerID, 
Payments, 
InvoicCode, 
(SELECT SUM(Payments) 
    FROM Customer IC 
    WHERE IC.customerID = OC.customerID )
FROM Customer  OC
于 2012-08-27T14:16:38.793 に答える
3

テーブルをそれ自体の合計バージョンに結合します。

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
于 2012-08-27T14:17:59.153 に答える
3

サブクエリを使用して合計を取得し、それをテーブルに結合して他の列を追加できます。

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 を参照してください

于 2012-08-27T14:18:05.967 に答える
2

dbmsがMSSql-Serverであると仮定すると、SUM(Payments)withOVER句を使用できます。

SELECT customerID, Payments,InvoicCode
   ,SumPayment=SUM(Payments)OVER(PARTITION BY customerID)
FROM t

SQL-フィドル:http ://sqlfiddle.com/#!3 / 2ac38 / 2/0

于 2012-08-27T14:19:53.420 に答える
2

SqlFiddle

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
于 2012-08-27T14:19:56.517 に答える
2

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
于 2012-08-27T14:15:49.127 に答える