SQL Server 2008 を使用しています。
x行のテーブルがあります。常に x を 5 で割り、3 番目のレコード グループを選択したいと思います。
テーブルに 100 個のレコードがあるとします。
100 / 5 = 20
3 番目のセグメントはレコード 41 から 60 になります。
SQL でこの 3 番目のセグメントのみを計算して選択するにはどうすればよいですか?
ありがとう。
SQL Server 2008 を使用しています。
x行のテーブルがあります。常に x を 5 で割り、3 番目のレコード グループを選択したいと思います。
テーブルに 100 個のレコードがあるとします。
100 / 5 = 20
3 番目のセグメントはレコード 41 から 60 になります。
SQL でこの 3 番目のセグメントのみを計算して選択するにはどうすればよいですか?
ありがとう。
使用できますNTILE
。
順序付きパーティション内の行を指定された数のグループに分散します。
例:
SELECT col1, col2, ..., coln
FROM
(
SELECT
col1, col2, ..., coln,
NTILE(5) OVER (ORDER BY id) AS groupno
FROM yourtable
)
WHERE groupno = 3
NTILE
これは、ランキング機能の完璧な使用法です。
基本的に、CTE内でクエリを定義し、行にNTILEを追加します。1からnまでの数値(への引数NTILE
)。行を列ごとに並べ替えると、探している行のnグループが取得され、これらのデータの「グループ」のいずれかを操作できます。
したがって、次のようなものを試してください。
;WITH SegmentedData AS
(
SELECT
(list of your columns),
GroupNo = NTILE(5) OVER (ORDER BY SomeColumnOfYours)
FROM dbo.YourTable
)
SELECT *
FROM SegmentedData
WHERE GroupNo = 3
もちろん、UPDATE
CTEの後にステートメントを使用して、これらの行を更新することもできます。