Próbowałem niektóre z inne rozwiązania tutaj, jednak wydaje się, że są albo lekko wyłączone, albo zamówienie nie było w porządku.
Moja próba rozwiązania Microsoft SQL Server wydaje się działać poprawnie:
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)
pamiętać, że w moim przykładzie, ja tylko używam Top 2 zamiast TOP 10. Jest to po prostu ze względu na mój danych testowych jest raczej bardziej ograniczony. Możesz łatwo zastąpić 2 za 10 we własnych danych.
Oto skryptu SQL do tworzenia tabeli:
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
I moje dane wygląda następująco:
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
Zauważ, że wynik zapytania jest prawidłowo uporządkowane według łącznej wartości sprzedaży, a nie alfabetyczny kod kraju, a kategoria "Inne" jest zawsze ostatnia, nawet jeśli jest to agregat wartości Sprzedaży zwykle popycha go na początek listy.
Nie twierdzę, że jest to najlepsze (czytaj: najbardziej optymalne) rozwiązanie, jednak dla zestawu danych, który dostarczyłem, wydaje się działać całkiem dobrze.
Który smak SQL używasz? Różne produkty będą miały różne rozwiązania – APC