TSQL - 自己更新表

时间:2012-08-27 23:54:47

标签: sql-server tsql

项目(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。

我觉得这应该是超级简单的,但无法弄清楚自我参考。

由于

2 个答案:

答案 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)