使用SQL Server存储过程更新用户排名
我有两个表,一个包含用户数据,另一个包含用户排名信息(促销所需的点数) 假设用户表如下所示:使用SQL Server存储过程更新用户排名,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我有两个表,一个包含用户数据,另一个包含用户排名信息(促销所需的点数) 假设用户表如下所示: login | ArticlePoints | PhotoPoints | StageId 用户排名信息表如下所示: StageId | StageName | MinimumPoints 1 | Beginner | 100 2 | Advanced | 200 3 | Expert | 300 用户信息表可能包含如下数据: StageId | StageName | MinimumPoin
login | ArticlePoints | PhotoPoints | StageId
用户排名信息表如下所示:
StageId | StageName | MinimumPoints
1 | Beginner | 100
2 | Advanced | 200
3 | Expert | 300
用户信息表可能包含如下数据:
StageId | StageName | MinimumPoints
1 | Beginner | 100
2 | Advanced | 200
3 | Expert | 300
我想要的是一个程序,添加用户点,并检查它是否足以提升排名。现在我是这样做的:
login | ArticlePoints | PhotoPoints | StageId
我正试图为这个问题准备一个更好的解决方案,但我不知道如何“连接”这两个表。编写一个
UPDATE
查询,返回计算值的StageID
,例如:
UPDATE t1
SET t1.StageID =
(SELECT TOP 1 StageID
FROM [RANKING_TABLE] t2
WHERE t1.ArticlePoints + t1.PhotoPoints >= t2.MinimumPoints
ORDER BY t2.MinimumPoints DESC)
FROM [USER_TABLE] t1
因此,如果用户总共有250分,则可以通过使用
TOP 1
和按t2排序来达到初学者和高级。MinimumPoints DESC
将选择最高的阶段。谢谢,一般来说,它会完成这项工作,但出于某种原因,它不想接受[USER\u TABLE]t1它说t1不应该在那里,它要求设置。因此,内部选择不会选择正确的值(如果删除t1)。我不认为我的解决方案是一个过度的尝试,我修改了查询,将别名正确地放在FROM子句中,这是我的错误