2017-01-03 3 views
0

表Bを基にして表Aの列の集計を実行しようとしています。結合条件が満たされた値を取得します。ただし、他の行の場合、値はNULLです。我々は次のスクリプト結合条件が満たされていないために合計が行われなかったすべての行が返される

を使用しているテーブルBからテーブルAに数量、金額の合計を計算する

表A

SKU | Quantity | Amount 
A | 
B | 
C | 
D | 
E | 
F | 

表B

Order | SKU | Quantity | Amount 
1  | A | 5  | 50 
2  | B | 50  | 2000 
3  | C | 100  | 5000 
4  | D | 50  | 60 
5  | A | 20  | 200 
6  | A | 60  | 600 
7  | B | 10  | 400 

UPDATE Table A x 
    SET Quantity = y.qty 
from (
    SELECT SKU, SUM(quantity) AS qty 
    FROM Table B 
    GROUP BY SKU 
) AS y 
WHERE x.SKU=y.SKU; 

これを行うには、我々は

表を取得している私たちは、私たちが合体使用してみました0とEとFを更新したいと思い

SKU | Quantity | Amount 
A | 85  | 
B | 60  | 
C | 100  | 
D | 50  | 
E |   | 
F |   | 

(、SUM(数量)を '0')が、 SKU E &FのテーブルAとテーブルBの間に結合がないので、値が0に更新されないことに気付きました。

これは可能ですか?

+0

使用 'COALESCE:

UPDATE A SET Quantity = (select coalesce(sum(quantity),0) from b where b.sku = a.sku); 

その他 - - おそらく、より高速な方法外側のあなたの元のクエリから派生テーブルに参加を使用することです(SUM(列)、0) '? – Marth

+0

これを実行しようとしましたが、結合条件が満たされているにもかかわらずゼロが戻されますが、残りの行ではNULLが戻されます。 –

+0

テーブル定義、サンプルデータ、クエリを質問に追加できますか? – Marth

答えて

0

これを行うには2通りの方法があります。一つは、共同関連サブクエリを使用することです:

update a 
    set quantity = y.qty 
from (
    select a.sku, coalesce(sum(b.quantity),0) as qty 
    from a 
    left join b on a.sku = b.sku 
    group by a.sku 
) as y 
where a.sku = y.sku; 
関連する問題