随着对表结构的一些假设,即存在着COL3了整整2项col3中每一个独特的价值。
DECLARE @table1 TABLE([col1] int, [col2] varchar, [col3] int);
INSERT INTO @table1(col1, col2, col3) VALUES(1, 'A', 1);
INTO @table1(col1, col2, col3) VALUES(2, 'B', 1);
INSERT INTO @table1(col1, col2, col3) VALUES(3, 'A', 2);
INSERT INTO @table1(col1, col2, col3) VALUES(4, 'D', 2);
INSERT INTO @table1(col1, col2, col3) VALUES(5, 'X', 3);
INSERT INTO @table1(col1, col2, col3) VALUES(6, 'G', 3);
SELECT
(SELECT TOP(1) t1.[col2] FROM @table1 AS t1 WHERE t1.[col3] = g.[GroupId] ORDER BY t1.[col1] ASC) AS [a],
(SELECT TOP(1) t2.[col2] FROM @table1 AS t2 WHERE t2.[col3] = g.[GroupId] ORDER BY t2.[col1] DESC) AS [b]
FROM
(SELECT DISTINCT u.col3 AS [GroupId] FROM @table1 AS u) AS g
使用此查询的优势比您之前发布的查询有什么优势。前一个更简单易懂。 – niceApp
这一个将解决组中有两行以上的情况。它只会使用第一个(按col1排序)两个值,而较简单的解决方案会产生重复的数据。在3个项目的情况下:#1和#2,#2和#3,#1和#3。 –
@mrp:我明白你选择了更简单的解决方案,因为你知道在一个组中不会有两个以上的项目。如果是这样,这个人可能已经失去了一些珍贵。它仍然表现出一种不同的方法,一种替代方案其他人可能会觉得它有用。 –