Подтвердить что ты не робот

Соединение Tsql подзапросов, каждое из которых требует предложение ORDER BY

Привет, я приношу свои извинения, если ответ для этого находится где-то в другом месте. Я огляделся, и я не мог найти простого решения. У меня есть запрос, который я хотел бы запустить. Меня не волнует порядок набора профсоюзов, только внутренние запросы возвращают правильные данные, которые являются "самыми большими областями".

(SELECT TOP 5 * FROM [geo].[Areas] WHERE CountryID = @CountryID AND (TypeID = 'City')
ORDER BY [ShapeArea] DESC) as BiggestCities
    UNION ALL
(SELECT TOP 5 * FROM [geo].[Areas] WHERE CountryID =  @CountryID AND (TypeID = 'National park')
ORDER BY [ShapeArea] DESC) as BiggestParks

Но T-sql не позволит мне иметь ORDER BY по подзапросам, только по всему Союзу... Помогите оценить! Я бы предпочел не создавать временные таблицы или что-то в этом роде.

4b9b3361

Ответ 1

Попробуйте это

SELECT * 
  FROM (SELECT TOP 5 * 
          FROM [geo].[Areas] 
         WHERE CountryID = @CountryID 
           AND (TypeID = 'City')
      ORDER BY [ShapeArea] DESC) as BiggestCities
UNION ALL
SELECT * 
  FROM (SELECT TOP 5 * 
          FROM [geo].[Areas] 
         WHERE CountryID =  @CountryID 
           AND (TypeID = 'National park')
      ORDER BY [ShapeArea] DESC) as BiggestParks

Ответ 2

SELECT t.* /* Excluding RowNum */
  FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY TypeID ORDER BY [ShapeArea] DESC) as RowNum
          FROM [geo].[Areas]
          WHERE CountryID = @CountryID 
            AND TypeID IN ('City', 'National park')
       ) t
  WHERE t.RowNum <= 5