Соединение 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 по подзапросам, только по всему Союзу... Помогите оценить! Я бы предпочел не создавать временные таблицы или что-то в этом роде.
Ответы
Ответ 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