2013-06-26 66 views
0

我沒有良好的英語......請幫我... 在SQL Server 2005,我有一個表Total(PhoneNumber, Money, City) 有許多相同的記錄具有相同PhoneNumber但不同CityMoney值。 現在我想把NewCity列的值設置爲:select Max Money(記錄中記錄的最大金額爲PhoneNumber)。 我該怎麼做? 請幫我...設置SQL的新值(選擇最大值)

例如:

PhoneNumber City Money NewCity 
0949000000 CTA 20  NULL 
0945777777 VTH 35  NULL 
0949000000 VTH 30  NULL 
0945777777 VTY 120  NULL 
0949000000 VTY 60  NULL 
+0

請顯示該示例數據的預期結果。我認爲你想把'NewCity'設置爲'City'值,那個'PhoneNumber'的Max(Money)'的行有?不是「最大(金錢)」本身? –

回答

0

請嘗試:

update t 
set NewCity=(select MAX(money) from YourTable b where b.PhoneNumber=t.PhoneNumber) 
from YourTable t 
+0

是的... thanx。請檢查編輯的答案。 – TechDo

1

假設你要設置NewCityCity值與Max(Money)行爲PhoneNumber了。 (而不是對數字Max(Money)

;WITH T1 AS 
(
SELECT *, 
     ROW_NUMBER() OVER (PARTITION BY PhoneNumber 
           ORDER BY Money DESC) AS RN 
FROM YourTable  
), T2 AS 
(
SELECT *, 
     MAX(CASE WHEN RN = 1 THEN City END) 
       OVER (PARTITION BY PhoneNumber) AS _NewCity 
FROM T1  
) 
UPDATE T2 
SET NewCity = _NewCity 

如果我的假設是錯誤的,你做實際上想要什麼的問題,指出這是簡單的。

;WITH CTE 
    AS (SELECT *, 
       MAX(money) OVER (partition BY PhoneNumber) Mx 
     FROM YourTable) 
UPDATE CTE 
SET NewCity = Mx 
0

你可以試試這個查看newcity列,如果你沒有newcity列於總表,只在重複表中查看總表和組最大(錢)。

select a.*,b.newcity from total a 
join (select phonenumber,city, max(money) as newcity 
     from total group by phonenumber,city) b on b.phonenumber = a.phonenumber 
              and b.city = a.city 
where a.money = b.newcity