8

項目(4 列、わかりやすくするために簡略化)

記録 | アイテム | 価格 | ゾーン

データ

1 | 100 | 10.00 | あ
2 | 100 | ヌル | B
3 | 100 | ヌル | ハ
4 | 200 | 25.00 | あ
5 | 200 | ヌル | B

に基づく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

または、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

1 つの商品に複数の価格がある場合は、いずれかを選択する必要があります。このサンプルでは、​​最小のものを選択します (列名itemがテーブル名と同じであるため、少し混乱します)。

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