在查询结果集中生成数字模式

use*_*463 4 sql-server sql-server-2008-r2

我希望在我的结果集中添加一个人工分组。我不能使用ROW_NUMBERRANK

从以下结果中获取SELECT Col1, Col2 FROM myTbl

Col1     Col2
----     ----
x        y
x        z
y        x
z        x
x        z
y        x
Run Code Online (Sandbox Code Playgroud)

我想添加一个将计数为 3 然后重复的列,以便我可以在需要时细分结果集:

Divider  Col1     Col2
-------  ----     ----
1         x        y
2         x        z
3         y        x
1         z        x
2         x        z
3         y        x
Run Code Online (Sandbox Code Playgroud)

当然,最简单的方法是使用游标或临时表遍历结果集并添加它,但是当结果集是 400 万行时,性能会很糟糕。

任何人都知道如何将此 Divider 列直接添加到SELECT语句中?

实际上,查询将检索按日期排序的结果集,但我仍然希望分隔符以固定方式进行计数。如果我尝试分区并使用 row_number,则序列将是不可预测的。假设我想获取更大的结果集并将其分布在一组队列中,但我希望它们按日期均匀分布,以确保每个队列都在处理最新的数据。如果我按日期排序并细分只有一个队列将获得最新数据。

我实际上并没有返回结果集中的日期;我只是按它订购。

小智 6

根据您的意见,您将按日期对结果进行排序。在这种情况下,您可以使用

ROW_Number () over( order by date) 
Run Code Online (Sandbox Code Playgroud)

这将输出行号。然后,您可以使用SQL Modulo 函数% 并执行 %3 ,它将为您提供 1,2,0 重复作为行输出,从而为您提供所需的分组。