SQL ServerからTop 10
またはSelect Top 'N'
行を選択できます。SQL Server 2005の最初の行をスキップしますか?
しかし、上部の結果から最初の行をスキップする方法はありますか?
私はselect top 5
の結果を得て、最初の行をスキップして次の4行だけを取得しますか?
SQL ServerからTop 10
またはSelect Top 'N'
行を選択できます。SQL Server 2005の最初の行をスキップしますか?
しかし、上部の結果から最初の行をスキップする方法はありますか?
私はselect top 5
の結果を得て、最初の行をスキップして次の4行だけを取得しますか?
あなたがOVER
句やランキング機能を使用することができます。これを直接フィルタリングすることはできませんので、サブクエリまたは共通テーブル式が必要です。以下の例では、後者を使用しています。
DECLARE @MyTable TABLE
(
ID INT,
Name VARCHAR(15)
)
INSERT INTO @MyTable VALUES (1, 'Alice')
INSERT INTO @MyTable VALUES (2, 'Bob')
INSERT INTO @MyTable VALUES (3, 'Chris')
INSERT INTO @MyTable VALUES (4, 'David')
INSERT INTO @MyTable VALUES (5, 'Edgar')
;WITH people AS
(
SELECT ID, Name, ROW_NUMBER() OVER (ORDER BY ID) RN
FROM @MyTable
)
SELECT ID, Name
FROM people
WHERE RN > 1
OFFSET
とFETCH
キーワードとSQL Serverの(コードネームデナリ)の次のバージョンでページネーションのためのより良いサポートがあります。
あなたはこのような何かを行うことができます:
SELECT
*
FROM (
SELECT
row_number() OVER (ORDER BY ID DESC) AS [rownum],
*
FROM
tbl
) T
WHERE
rownum BETWEEN (2) AND (5)
更新:自分の価値観を持つように
を更新しました。
アップデート2:
が不足しているサブクエリでエラーを修正しました。クリスダイバーがこれを指摘してくれてありがとう。このような
何か:
-- Test table
declare @T table(ID int)
-- Add test data
insert into @T
select 1 union all
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 6
-- Query using row_number() over(...)
-- to get rows 2 - 5
select T.ID
from (
select *,
row_number() over(order by ID) as rn
from @T
) as T
where T.rn between 2 and 5
素晴らしい...私はこの方向には考えなかった。私はトップ5を選択しようとしていましたが、私は「スキップ」という単語を最初にスキップしようとしていました...ありがとうございました:-) –
+1これはランク付け関数です。もっと便利な答え – Sascha
+1は 'OFFSET'と' FETCH'情報です。 – dotNETbeginner