我有一个用户表:
|Username|UserType|Points|
|John |A |250 |
|Mary |A |150 |
|Anna |B |600 |
Run Code Online (Sandbox Code Playgroud)
和级别
|UserType|MinPoints|Level |
|A |100 |Bronze |
|A |200 |Silver |
|A |300 |Gold |
|B |500 |Bronze |
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个查询来获取每个用户的级别。类似的东西:
SELECT *
FROM Users U
INNER JOIN (
SELECT TOP 1 Level, U.UserName
FROM Levels L
WHERE L.MinPoints < U.Points
ORDER BY MinPoints DESC
) UL ON U.Username = UL.Username
Run Code Online (Sandbox Code Playgroud)
这样的结果将是:
|Username|UserType|Points|Level |
|John |A |250 |Silver |
|Mary |A |150 |Bronze |
|Anna |B |600 …Run Code Online (Sandbox Code Playgroud) 如果我有一个包含 2 列的简单表和一个由两列组成的复合主键,我该如何重命名其中一列,但前提是它不会导致主冲突?
这是一个简化的示例。
拿下表:
User | Role
------|----------------
Joe | User
Joe | Administrator
Brian | User
Anna | Administrator
Anna | Admin
Run Code Online (Sandbox Code Playgroud)
假设我想编写以下查询:
UPDATE UserRoles Set Role = 'Admin' WHERE Role = 'Administrator'
Run Code Online (Sandbox Code Playgroud)
在不使用游标的情况下,如何更改 SQL 更新语句以避免重命名 Anna(因为该用户已经具有 Admin 角色),但仍重命名 Joe?
甚至可以使用基于集合的 SQL 还是使用游标是唯一的方法?
谢谢。