Я попробовал некоторые из другие решения здесь, однако они кажутся либо слегка отключенными, либо порядок не совсем прав.
Моей попытка решения Microsoft SQL Server появляется для правильной работы:
SELECT Ctry, Sales FROM
(
SELECT TOP 2
Ctry,
SUM(Sales) AS Sales
FROM
Table1
GROUP BY
Ctry
ORDER BY
Sales DESC
) AS Q1
UNION ALL
SELECT
'Other' AS Ctry,
SUM(Sales) AS Sales
FROM
Table1
WHERE
Ctry NOT IN (SELECT TOP 2
Ctry
FROM
Table1
GROUP BY
Ctry
ORDER BY
SUM(Sales) DESC)
Обратите внимания, что в моем примере, я только с помощью TOP 2, а не ТОП 10. Это просто из-за мои тестовые данные будучи более ограниченным. Вы можете легко заменить 2 на 10 в своих собственных данных.
Вот SQL-скрипт для создания таблицы:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Table1](
[Ctry] [varchar](50) NOT NULL,
[Sales] [float] NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
И мои данные выглядит следующим образом:
GB 10
GB 21.2
GB 34
GB 16.75
US 10
US 11
US 56.43
FR 18.54
FR 98.58
WE 44.33
WE 11.54
WE 89.21
KR 10
PO 10
DE 10
Обратите внимание, что результат запроса правильно упорядочены по совокупной стоимости продаж и не алфавитный код страны, и что категория «Другие» всегда последняя, даже если это совокупная сумма продаж, обычно подталкивает ее к вершине списка.
Я не говорю, что это лучшее (прочитанное: наиболее оптимальное) решение, однако, для набора данных, который я предоставил, кажется, работает очень хорошо.
Какой вкус SQL вы используете? Различные продукты будут иметь разные решения – APC