Привет, следующие работы в MSSQL2000
SELECT tbl.Cust,
tbl.Group,
tbl.Sales
FROM MyTable tbl
WHERE (SELECT COUNT(*)
FROM MyTable tbl2
WHERE tbl2.Sales > tbl.Sales
AND tbl2.Group = tbl.Group
AND tbl2.Cust = tbl.Cust) < 2
ORDER BY tbl.Cust ASC,
tbl.Group ASC,
tbl.Sales DESC
Внутренний запрос Select Count(*)
работает, считая, сколько записей находится над записью, которую он просматривает в данный момент - в этом случае вы хотите, чтобы b было 0 (1-е место) или 1 (2-е место).
Обратите внимание, что из-за этого, если у вас есть более 2 значений, разделяющих первое место (например, 3 A / 1 с продажами 15), вы получите более 2 результатов назад.
Однако для вашего набора тестов он возвращает правильные результаты, и использование DISTINCT
поможет, если вы предпочтете получить меньше, чем больше результатов в этом случае. Кроме того, если ваши записи имеют отличный идентификатор записи, это может помочь вам выбрать между ними.