2016-05-27 68 views
1

如何將每個產品的受歡迎程度(僅在銷售量> 1時)設置爲最受歡迎產品(來自同一品牌)的受歡迎程度同一張桌子。我有這個至今:SQL:僅當滿足條件時才更新具有相同表中的值的字段

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

顯然「currentRow」不能因爲這樣的存在,所以......

我也尋找到this answer,但至今沒有運氣。

在每一行上只是更好地iterate/loop,檢查條件,並在必要時進行更新?

+0

你是如何獲得前1名的?它是按銷售額排序嗎? – Aldrin

回答

3

你所需要的就是別名

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 
0

試試這個腳本:

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 
0

你可以用一個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 
0

如果你使用「TOP」,你需要使用ORDER BY,否則使用TH這不能保證它會給你最流行的。如果您還在尋找最受歡迎的產品,只有銷售額大於1的地方,您需要在子查詢中使用WHERE語句。使用別名作爲@ Y.B。建議,你可以做這樣的事情(有或沒有子查詢中的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 
相關問題