我的桌子:
姓名 | 身份证 | 状态 |
---|---|---|
罗杰柯林斯 | 904 | 3 |
罗杰·约翰·霍斯普尔 | 915 | 3 |
罗杰·约翰·西皮 | 932 | 3 |
罗杰·约翰·希佩和 T.C.罗威尔 | 5341 | 2 |
罗杰·约翰·希佩和 T.C.罗威尔 | 5341 | 3 |
由于输入不良,有些人(例如 R J Shippey 和 T C Rowell)的“状态”值超过 1。 我想做的是对此表进行 GROUP BY,但对状态的最大值进行分组。 所以表格看起来像这样:
姓名 | 身份证 | 最大状态 |
---|---|---|
罗杰柯林斯 | 904 | 3 |
罗杰·约翰·霍斯普尔 | 915 | 3 |
罗杰·约翰·西皮 | 932 | 3 |
罗杰·约翰·希佩和 T.C.罗威尔 | 5341 | 3 |
我已经成功地用 Max_Status 创建了一个新列,如下所示:
姓名 | 身份证 | 状态 | 最大_状态 |
---|---|---|---|
罗杰柯林斯 | 904 | 3 | 3 |
罗杰·约翰·霍斯普尔 | 915 | 3 | 3 |
罗杰·约翰·西皮 | 932 | 3 | 3 |
罗杰·约翰·希佩和 T.C.罗威尔 | 5341 | 2 | 3 |
罗杰·约翰·希佩和 T.C.罗威尔 | 5341 | 3 | 3 |
使用此代码:
SELECT Name,
ID,
Status,
MAX(Status) OVER(PARTITION BY Name) AS MaxStatus
FROM [dbo].[TaskStatus_View]
但现在我无法根据 Max_Status 列进行分组,因为(据我了解)我是在访问原始数据库后创建它的,所以它只是说无效的列名。 所以我不确定下一步。我尝试过将分区行放入子查询中,但我无法真正直观地理解这一点。
以下是如何将查询用作子查询并执行分组
SELECT Name,ID,MaxStatus FROM
(
SELECT Name,ID,Status,MAX(Status) OVER(PARTITION BY Name) AS MaxStatus
FROM [dbo].[TaskStatus_View]
) t
GROUP BY Name,ID,MaxStatus
姓名 | 身份证 | 最大状态 |
---|---|---|
罗杰柯林斯 | 904 | 3 |
罗杰·约翰·霍斯普尔 | 915 | 3 |
罗杰·约翰·西皮 | 932 | 3 |
罗杰·约翰·希佩和 T.C.罗威尔 | 5341 | 3 |