我正在使用 SQL Server 2008。
我有一个包含 x 行数的表。我想总是将 x 除以 5 并选择第三组记录。
假设表中有 100 条记录:
100 / 5 = 20
第三段将是记录 41 到 60。
我如何才能在 SQL 中仅计算和选择第 3 段?
谢谢。
我正在使用 SQL Server 2008。
我有一个包含 x 行数的表。我想总是将 x 除以 5 并选择第三组记录。
假设表中有 100 条记录:
100 / 5 = 20
第三段将是记录 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 之后使用语句来更新这些行。