我们试图基于表B对表A上的一列进行聚合。我们看到,在联接两个表时,我们只获得满足联接条件的值。但是,对于其他行,该值为 null。
表 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
我们想从表 B 计算表 A 中的数量和金额的总和。我们正在使用以下脚本
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;
在这样做时,我们得到了
表 A
SKU | Quantity | Amount
A | 85 |
B | 60 |
C | 100 |
D | 50 |
E | |
F | |
我们希望将 E 和 F 更新为 0。我们尝试使用Coalesce(SUM(quantity),'0'),但后来意识到这不会将值更新为0,因为SKU的E和F的表A和B之间没有连接。
这可能吗?
有两种方法可以做到这一点。一种是使用共同相关的子查询:
UPDATE A
SET Quantity = (select coalesce(sum(quantity),0)
from b where b.sku = a.sku);
另一种 - 可能更快的方法 - 是在原始查询的派生表中使用外部联接:
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;