52

如何在一个结果集中获取表的第一条记录和表的最后一条记录?

此查询失败

SELECT TOP 1 Id,Name FROM Locations ORDER BY Id
UNION ALL
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id DESC

有什么帮助吗?

4

4 回答 4

78

将您的order byandtop语句放入子查询中:

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
于 2011-04-05T11:34:42.970 回答
11

如果您使用的是 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

唯一与您的原始查询不同的地方是表中只有一行(在这种情况下,我的答案返回一行,而您的答案将返回同一行两次)

于 2011-04-05T12:24:34.970 回答
10
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
于 2011-04-05T11:30:01.547 回答
3
SELECT TOP 1 Id as sameColumn,Name FROM Locations 
UNION ALL
SELECT TOP 1 Id as sameColumn,Name FROM Locations ORDER BY sameColumn DESC
于 2017-08-01T06:47:15.490 回答