100% непроверено, и с моей головы, но вы можете попробовать что-то вроде этого. Если у меня будет возможность протестировать сегодня вечером, я обновлю сообщение, но на ужин открыта бутылка вина, и сегодня пятница ...:)
WITH CTE AS
(
SELECT
ColumnB,
ColumnA,
ROW_NUMBER() OVER (ORDER BY ColumnB) AS RowNumber
FROM
dbo.SomeTable
)
SELECT
CASE WHEN RowNumber <= 5 THEN ColumnB ELSE 'Other' END AS ColumnB,
SUM(ColumnA) AS ColumnA
FROM
CTE
GROUP BY
CASE WHEN RowNumber <= 5 THEN ColumnB ELSE 'Other' END
ORDER BY
MIN(RowNumber)
РЕДАКТИРОВАТЬ: похоже, это сработало после нескольких глупых синтаксических ошибок. Я исправил их, поэтому теперь они должны работать, как указано выше. Я не могу говорить о производительности на большом наборе данных, но стоит попробовать.