表项目(4列,为清晰起见而简化)
Record | Item | Price | Zone
数据
1 | 100 | 10.00 | A 2 | 100 | NULL | B 3 | 100 | NULL | C 4 | 200 | 25.00 | A 5 | 200 | NULL | B
尝试使用基于NULL
的非NULL
中的相应值更新Item
。因此,所有项目100都将读取10.00并且项目200都将读取25.00。
我觉得这应该是超级简单的,但无法弄清楚自我参考。
由于
答案 0 :(得分:15)
这里你去
UPDATE a
SET a.Price=b.Price
FROM Item AS a
INNER JOIN Item AS b
ON a.item=b.item
WHERE a.Price is NULL AND b.price is NOT NULL
或者如果有多个非空价格,并且您想要选择最高价格。
UPDATE a
SET a.Price=(SELECT MAX(b.PRICE) FROM ITEM AS b WHERE b.Item=a.Item and b.Price is not null )
FROM Item AS a
WHERE a.Price is NULL
答案 1 :(得分:0)
如果您有多个物品价格,则需要选择一个。此示例选择最小的一个(有点混淆,列名item
与表名相同):
UPDATE item i
SET price = (SELECT MIN(price)
FROM item
WHERE item = i.item
GROUP BY item)