Как получить первую запись таблицы и последней записи таблицы в одном наборе результатов?
Этот запрос терпит неудачу
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id
UNION ALL
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id DESC
Любая помощь?
Ответ 1
Поместите свои операторы order by и top в подзапросы:
select first.Id, first.Name
from (
select top 1 *
from Locations
order by Id) first
union all
select last.Id, last.Name
from (
select top 1 *
from Locations
order by Id desc) last
Ответ 2
Если вы работаете с SQL Server 2005 или более поздней версией:
; WITH NumberedRows as (
SELECT Id,Name,
ROW_NUMBER() OVER (ORDER BY Id) as rnAsc,
ROW_NUMBER() OVER (ORDER BY Id desc) as rnDesc
FROM
Locations
)
select * from NumberedRows where rnAsc = 1 or rnDesc = 1
Единственное место, которое не будет похоже на ваш исходный запрос, - это если в таблице есть только одна строка (в этом случае мой ответ возвращает одну строку, тогда как ваш будет возвращать одну и ту же строку дважды)
Ответ 3
select * from (
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id) X
UNION ALL
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id DESC
Ответ 4
SELECT TOP 1 Id as sameColumn,Name FROM Locations
UNION ALL
SELECT TOP 1 Id as sameColumn,Name FROM Locations ORDER BY sameColumn DESC