我们正在尝试基于表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(数量),'0')但后来意识到这不会将值更新为0,因为表A和表之间没有连接B对于SKU E& F。
这可能吗?
答案 0 :(得分:0)
有两种方法可以做到这一点。一种是使用共同相关的子查询:
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;