sql - 根据相关行中的值更新列

标签 sql sql-server-2008 sql-update rows

我在 SQL Server 2008 中有一个如下表

  AMID                TierLevel
 --------            -------------
  999                 GOLD
  1000                SILVER   
  1000                GOLD
  1000                PLATINUM
  1000                BRONZE
  1001                GOLD
  1001                SILVER
  1002                SILVER
  1003                GOLD

现在我想像下面这样更新这个表
  AMID                TierLevel
 --------            -------------
  999                 GOLD
  1000               PLATINUM  
  1000               PLATINUM
  1000               PLATINUM
  1000               PLATINUM
  1001                GOLD
  1001                GOLD
  1002                SILVER
  1003                GOLD

这里的条件是
  • 我想要相同 AMID 的唯一 Tier 值,并且应在优先级基础中选择 Tier 值,例如
  • 铂金
  • 青铜
  • 这意味着如果它的 Tier 值中存在最高的值,则选择该值。就像我在第二个表中显示的那样,1000 的铂金和 1001 的金..

  • 请在这件事上给予我帮助

    谢谢,
    哈利

    最佳答案

    我会使用临时表来存储每个层的排名:

    DECLARE @Rank TABLE (ID INT NOT NULL PRIMARY KEY, Name VARCHAR(10) NOT NULL)
    INSERT @Rank VALUES (1, 'PLATINUM'), (2, 'GOLD'), (3, 'SILVER'), (4, 'BRONZE')
    
    ;WITH T AS
    (   SELECT  AMID, TierLevel, MIN(ID) OVER(PARTITION BY AMID) [MinID]
        FROM    #T
                INNER JOIN @Rank
                    ON Name = TierLevel
    )
    UPDATE  T
    SET     TierLevel = Name
    FROM    T
            INNER JOIN @Rank
                ON ID = MinID
    WHERE   TierLevel <> Name
    

    这是使用以下示例数据完成的:
    CREATE TABLE #T (AMID INT, TierLevel VARCHAR(10))
    INSERT #T VALUES 
        (999, 'GOLD'), 
        (1000, 'SILVER'), 
        (1000, 'GOLD'), 
        (1000, 'PLATINUM'), 
        (1000, 'BRONZE'),
        (1001, 'GOLD'),
        (1001, 'SILVER'),
        (1002, 'SILVER'),
        (1003, 'GOLD')
    

    关于sql - 根据相关行中的值更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10687879/

    相关文章:

    SQL:这样的查询是否可以,或者是否有更有效的方法,例如使用连接?

    sql - 使用数学方法创建灯具列表

    mysql - SQL 获取在同一查询上执行更新的行的 ID

    MySQL UPDATE QUERY 重复错误

    sql - 在后台运行大型查询 MS SQL

    sqlite CTE 与更新

    MySQL 5.6.13 无法正确执行创建表

    mysql - SQL Where Not Exists - 多个 WHERE

    sql - 查找仅包含零的列

    c# - GridView 没有拾取空数据对象