我想每组得到一行(根据 A 列),这一行应该是该组中“B”值最高的行。顺便说一句,如果需要,(A,B)是唯一的。我编写了以下 sql 代码,它完成了这项工作。我想知道有没有更有效的方法?我更喜欢纯 SQL,但我将在 SQL SERVER 2012 的存储过程中使用它。
DECLARE @mytab TABLE (A INT, B INT, C INT)
INSERT INTO @mytab ( A, B, C ) VALUES (1, 1, 1)
INSERT INTO @mytab ( A, B, C ) VALUES (1, 2, 1)
INSERT INTO @mytab ( A, B, C ) VALUES (1, 3, 1)
INSERT INTO @mytab ( A, B, C ) VALUES (2, 2, 2)
INSERT INTO @mytab ( A, B, C ) VALUES (3, 3, 1)
INSERT INTO @mytab ( A, B, C ) VALUES (3, 2, 2)
INSERT INTO @mytab ( A, B, C ) VALUES (3, 1, 3)
;WITH numbered AS
(
SELECT *, rn=ROW_NUMBER() OVER (PARTITION BY A ORDER BY B DESC)
FROM @mytab AS m
)
SELECT A, B, C
FROM numbered
WHERE rn=1
返回以下
A B C
1 3 1
2 2 2
3 3 1