为SQL设置新值(选择最大值)

时间:2013-06-26 09:15:05

标签: sql sql-server

我的英语不好......请帮帮我... 在SQL Server 2005中,我有一个表Total(PhoneNumber, Money, City) 有许多相同的记录具有相同的PhoneNumber但不同的CityMoney值。 现在,我想为NewCity列设置值:select Max Money(记录中具有相同PhoneNumber的记录中的最大金额)。 我怎样才能做到这一点? 请帮帮我......

例如:

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

3 个答案:

答案 0 :(得分:1)

假设您要将NewCity设置为City的值Max(Money)的{​​{1}}行。 (而不是数字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

答案 1 :(得分:0)

请尝试:

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

答案 2 :(得分: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