100% non testé, et au large de ma tête, mais vous pouvez donner quelque chose comme ça. Si j'ai la chance de tester ce soir, je vais mettre à jour le poste, mais il y a une bouteille de vin ouvert pour le dîner et c'est vendredi soir ... :)
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)
EDIT: On dirait que cela a fonctionné après quelques erreurs de syntaxe idiotes. J'ai corrigé ceux-là, donc ça devrait fonctionner comme indiqué ci-dessus maintenant. Cependant, je ne peux pas parler de performances sur un grand ensemble de données, mais cela vaut la peine d'essayer.
Remarque: Je n'ai pas explicitement additionné la colonne B car vous ne l'avez pas demandée. – RedFilter