小编Lam*_*lan的帖子

查询以选择连接时的最大值


我有一个用户表:

|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)

join sql-server sql-server-2012 max

15
推荐指数
1
解决办法
6万
查看次数

如果不存在则更新语句

如果我有一个包含 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 还是使用游标是唯一的方法?

谢谢。

sql-server t-sql update sql-server-2014

0
推荐指数
1
解决办法
2万
查看次数