me trataron algunos de los otras soluciones aquí, sin embargo, parecen estar ligeramente fuera de servicio, o el orden no fue del todo correcto.
Mi intento de solución de Microsoft SQL Server parece funcionar correctamente:
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)
Tenga en cuenta que en mi ejemplo, yo sólo estoy usando TOP 2 en lugar de TOP 10. Esto es simplemente debido a mi datos de prueba siendo bastante más limitado. Puede sustituir fácilmente el 2 por un 10 en sus propios datos.
Aquí está la secuencia de comandos SQL para crear la tabla:
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
Y mis datos tiene el siguiente aspecto:
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
Tenga en cuenta que el resultado de la consulta se ordena correctamente por el agregado de valor de las ventas y no el código de país alfabético, y que la categoría "Otro" siempre es la última, incluso si su agregado de valor de venta ordinariamente lo empujaría a la parte superior de la lista.
No digo que esta es la mejor solución (léase: la más óptima), sin embargo, para el conjunto de datos que proporcioné, parece funcionar bastante bien.
¿Qué sabor de SQL estás usando? Diferentes productos tendrán diferentes soluciones – APC