1 つの結果セットでテーブルの最初のレコードとテーブルの最後のレコードを取得するにはどうすればよいですか?
このクエリは失敗します
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id
UNION ALL
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id DESC
何か助けはありますか?
1 つの結果セットでテーブルの最初のレコードとテーブルの最後のレコードを取得するにはどうすればよいですか?
このクエリは失敗します
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id
UNION ALL
SELECT TOP 1 Id,Name FROM Locations ORDER BY Id DESC
何か助けはありますか?
order by
andtop
ステートメントをサブクエリに入れます。
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
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
これが元のクエリとは異なる唯一の場所は、テーブルに1つの行しかない場合です(この場合、私の答えは1つの行を返しますが、あなたの答えは同じ行を2回返します)
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