8

(4 列,为清楚起见进行了简化)

记录 | 项目 | 价格 | 区

数据

1 | 100 | 10.00 | 一种
2 | 100 | 空 | 乙
3 | 100 | 空 | C
4 | 200 | 25.00 | 一种
5 | 200 | 空 | 乙

尝试使用基于NULL的非 s 中的相应值来更新 s 。因此,所有项目 100 的读数均为 10.00,两个项目 200 的读数均为 25.00。NULLItem

我觉得这应该非常容易,但无法弄清楚自我参考。

谢谢

4

2 回答 2

21

给你

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  
于 2012-08-28T00:01:59.830 回答
0

如果您对一个项目有多个价格,则需要选择一个。item此示例选择最小的一个(列名与表名相同,这有点令人困惑):

UPDATE item i
  SET price = (SELECT MIN(price)
                FROM item
                WHERE item = i.item
                GROUP BY item)
于 2012-08-28T00:09:13.750 回答