Sql server 根据SQL Server中的三个阶段仅显示顶部记录
我有一个场景,表 记录id、记录阶段、其他列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,
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 |
+----+----+-------+--------+