SQL选择段

时间:2012-06-13 06:53:37

标签: sql sql-server-2008

我正在使用SQL Server 2008。

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

假设表中有100条记录:

100 / 5 = 20

第3段将记录41至60.

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

感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用NTILE

  

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

示例:

SELECT col1, col2, ..., coln
FROM
(
    SELECT
        col1, col2, ..., coln,
        NTILE(5) OVER (ORDER BY id) AS groupno
    FROM yourtable
)
WHERE groupno = 3

答案 1 :(得分: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

当然,您也可以在CTE之后使用UPDATE语句来更新这些行。