2

我正在使用 SQL Server 2008。

我有一个包含 x 行数的表。我想总是将 x 除以 5 并选择第三组记录。

假设表中有 100 条记录:

100 / 5 = 20

第三段将是记录 41 到 60。

我如何才能在 SQL 中仅计算和选择第 3 段?

谢谢。

4

2 回答 2

2

您可以使用NTILE.

将有序分区中的行分布到指定数量的组中。

例子:

SELECT col1, col2, ..., coln
FROM
(
    SELECT
        col1, col2, ..., coln,
        NTILE(5) OVER (ORDER BY id) AS groupno
    FROM yourtable
)
WHERE groupno = 3
于 2012-06-13T06:56:30.337 回答
1

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 之后使用语句来更新这些行。

于 2012-06-13T06:58:16.583 回答