Ho provato alcuni dei altre soluzioni qui, tuttavia sembrano essere leggermente fuori, o l'ordine non era del tutto corretto.
Il mio tentativo di una soluzione di Microsoft SQL Server sembra funzionare correttamente:
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)
Si noti che nel mio esempio, sto utilizzando solo TOP 2 piuttosto che TOP 10. Ciò è dovuto semplicemente al mio dati di test essere piuttosto più limitato. Puoi facilmente sostituire il 2 per un 10 nei tuoi dati.
Ecco lo script SQL per creare la tabella:
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
E il mio dati assomiglia a questo:
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
Si noti che il risultato della query sia correttamente ordinata dal complessivo valore delle vendite e non il codice paese alfabetico e che la categoria "Altro" è sempre l'ultima, anche se il valore aggregato delle vendite lo spingerebbe normalmente in cima all'elenco.
Non sto dicendo che questa sia la soluzione migliore (leggi: la più ottimale), tuttavia, per il set di dati che ho fornito sembra funzionare piuttosto bene.
Quale sapore di SQL stai usando? Prodotti diversi avranno soluzioni diverse – APC