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