簡體   English   中英

SQL:僅在滿足條件時,使用同一個表中的值更新字段

[英]SQL: update a field with a value from the same table, only if condition is met

如何將每個產品的受歡迎程度(僅當銷售額> 1)設置為同一表中最受歡迎產品(來自同一品牌)的受歡迎程度。 到目前為止我有這個:

UPDATE Products
SET popularity= 
    (
    SELECT TOP 1 popularity FROM products
    WHERE brand = currentRow.brand
    )
WHERE sales > 1

顯然'currentRow'不能存在,因此......

我也在考慮這個答案 ,但到目前為止還沒有運氣。

迭代/循環每一行,檢查條件並在必要時更新會更好嗎?

你需要的是別名

UPDATE Tgt
SET popularity = (
    SELECT Max(popularity)
    FROM products Ref
    WHERE Ref.brand = Tgt.brand --< Refer by alias
)
FROM Products Tgt --< Give the target table an alias
WHERE sales > 1

試試這個腳本:

SELECT TOP 1 POPULARITY, BRAND
INTO #TEMP
FROM PRODUCTS
WHERE SALES > 1

UPDATE PRODUCTS
SET POPULARITY = B.POPULARITY
FROM PRODUCTS A, #TEMP B
WHERE A.BRAND = B.BRAND

您可以使用JOIN和派生表執行此操作

UPDATE P1
SET    P1.Popularity = P2.Popularity
FROM   Products P1
INNER JOIN (SELECT   MAX(Popularity) as [Popularity], Brand
            FROM     Products P2
            GROUP BY Brand) P2 on P2.Brand = P1.Brand
WHERE SALES > 1

如果您使用“TOP”,則需要使用ORDER BY,否則無法保證它會為您提供最受歡迎的。 如果您還在尋找最受歡迎的,只有銷售額大於1的地方,您的子查詢中需要一個WHERE語句。 使用別名作為@YB建議,你可以做這樣的事情(在子查詢中有或沒有WHERE)。

UPDATE a
SET popularity= 
    (
    SELECT TOP 1 b.popularity FROM Products b
    WHERE b.brand = a.brand 
    AND sales > 1
    ORDER BY b.popularity DESC
    )
FROM Products a
WHERE sales > 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM