【问题标题】:Set new value for SQL (select Max value)为 SQL 设置新值(选择最大值)
【发布时间】:2013-06-26 09:15:04
【问题描述】:

我英语不好……请帮帮我…… 在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

【问题讨论】:

  • 请显示该示例数据所需的结果。我想您想将NewCity 设置为City 值,该值与Max(Money) 对应的PhoneNumber 行具有?不是Max(Money) 本身?

标签: sql sql-server


【解决方案1】:

假设您要将NewCity 设置为City 值,该值与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 

【讨论】:

    【解决方案2】:

    请尝试:

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

    【讨论】:

      【解决方案3】:

      如果您的总表中没有 newcity 列,您可以尝试查看 newcity 列,并且只查看总表上的 max(money) 和重复表上的分组。

      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
      

      【讨论】:

        猜你喜欢
        • 2020-05-16
        • 1970-01-01
        • 1970-01-01
        • 2018-03-06
        • 1970-01-01
        • 1970-01-01
        • 2013-05-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多