2016-08-20 8 views
1

私は2つのテーブルの請求書と支払いを持っています。請求書には多くの支払いがあり、すべての請求書行について、total_payments_amountというフィールドを更新して、1つのSQL照会でそれぞれの関連するすべての支払いの合計を計算します。だからここに私はSQL INNER JOINを使用した一括更新フィールド


UPDATE invoices 
SET total_payments_amount = pays.total_amount 
FROM invoices inv 
INNER JOIN (
    SELECT invoice_id, SUM(amount) as total_amount 
    FROM payments 
    WHERE invoice_id IS NOT NULL 
    GROUP BY invoice_id 
) pays 
ON inv.id = pays.invoice_id 

が、このクエリを実行した後、私はすべてのレコードが同じ値が含まれていることを確認してみましたものです。ここに何が問題なの?

+0

MySQLやSQL Serverの.. CTEで試してみてください? –

+0

@vkp postgresql – Azzurrio

答えて

0

;With cte_total 
AS (SELECT invoice_id, SUM(isnull(amount,0)) as total_amount 
     FROM payments 
     WHERE invoice_id IS NOT NULL 
     GROUP BY invoice_id) 
UPDATE inv 
    SET inv.total_payments_amount = c.total_amount 
FROM cte_total c 
    JOIN invoices inv 
     ON inv.id = c.invoice_id 
+0

それは動作しません。すべてのレコードが同じ値で変更されました。 – Azzurrio

+0

あなたは '支払い'テーブルをチェックしてください。それはすべての請求書に対して同じ支払情報を含むかもしれません..いくつかのサンプルデータとあなたが期待している結果を提供できますか? –

関連する問題