如果您有大量数据,则可以尝试以下解决方案:
DECLARE @MyTable TABLE
(
[ProblemId] [int] IDENTITY(1,1) NOT NULL,
[SubTopicId] [int] NOT NULL,
[Locator] [nvarchar](50) NULL
);
INSERT @MyTable (SubTopicId, Locator)
SELECT 11, 'A' UNION ALL
SELECT 11, 'B' UNION ALL
SELECT 22, 'C' UNION ALL
SELECT 44, 'C' UNION ALL
SELECT 33, 'D' UNION ALL
SELECT 55, 'D' UNION ALL
SELECT 22, 'D' UNION ALL
SELECT 22, NULL;
SET STATISTICS IO ON;
SELECT *
FROM
(
SELECT x.*,
ROW_NUMBER() OVER(PARTITION BY x.Locator ORDER BY x.ProblemId ASC) AS RowNumAsc,
ROW_NUMBER() OVER(PARTITION BY x.Locator ORDER BY x.ProblemId DESC) AS RowNumDesc
FROM @MyTable x
) src
WHERE NOT(src.RowNumAsc = 1 AND src.RowNumDesc = 1);