Sql server 根据SQL Server中的三个阶段仅显示顶部记录

Sql server 根据SQL Server中的三个阶段仅显示顶部记录,sql-server,Sql Server,我有一个场景,表 记录id、记录阶段、其他列 1,A,Text1 1,B,Text2 1,C,Text3 1,D,Text4 2,A,SText1 2,B,SText2 我的输出应该基于记录id 1) 记录id为1的具有阶段D的记录 2) 由于没有阶段C和阶段D,因此显示带有阶段B的记录_id 2 O/p 我在SQL Server视图中处理这个案例,如果有人能在这方面帮助我,那将是非常有帮助的。使用行数()很容易。 以下是一个解决方案: CREATE TABLE T( ID INT,

我有一个场景,表 记录id、记录阶段、其他列

1,A,Text1
1,B,Text2
1,C,Text3
1,D,Text4
2,A,SText1
2,B,SText2
我的输出应该基于记录id

1) 记录id为1的具有阶段D的记录

2) 由于没有阶段C和阶段D,因此显示带有阶段B的记录_id 2

O/p


我在SQL Server视图中处理这个案例,如果有人能在这方面帮助我,那将是非常有帮助的。

使用
行数()很容易。

以下是一个解决方案:

CREATE TABLE T(
    ID INT,
    Stage VARCHAR(10),
    Other VARCHAR(45)
    );

INSERT INTO T VALUES
(1, 'A', 'Text1'),
(1, 'B', 'Text2'),
(1, 'C', 'Text3'),
(1, 'D', 'Text4'),
(2, 'A', 'SText1'),
(2, 'B', 'SText2');

WITH CTE AS
(
SELECT MAX(T.ID) AS ID,
       MAX(T.Stage) AS Stage
FROM T 
GROUP BY ID
)
SELECT T.*
FROM T INNER JOIN CTE ON T.ID = CTE.ID AND T.Stage = CTE.Stage;
结果:

+----+----+-------+--------+
|    | ID | Stage | Other  |
+----+----+-------+--------+
|  1 |  1 | D     | Text4  |
|  2 |  2 | B     | SText2 |
+----+----+-------+--------+
CREATE TABLE T(
    ID INT,
    Stage VARCHAR(10),
    Other VARCHAR(45)
    );

INSERT INTO T VALUES
(1, 'A', 'Text1'),
(1, 'B', 'Text2'),
(1, 'C', 'Text3'),
(1, 'D', 'Text4'),
(2, 'A', 'SText1'),
(2, 'B', 'SText2');

WITH CTE AS
(
SELECT MAX(T.ID) AS ID,
       MAX(T.Stage) AS Stage
FROM T 
GROUP BY ID
)
SELECT T.*
FROM T INNER JOIN CTE ON T.ID = CTE.ID AND T.Stage = CTE.Stage;
+----+----+-------+--------+
|    | ID | Stage | Other  |
+----+----+-------+--------+
|  1 |  1 | D     | Text4  |
|  2 |  2 | B     | SText2 |
+----+----+-------+--------+