我在 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
这里的条件是
请在这件事上给予我帮助
谢谢,
哈利
最佳答案
我会使用临时表来存储每个层的排名:
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/