use*_*463 4 sql-server sql-server-2008-r2
我希望在我的结果集中添加一个人工分组。我不能使用ROW_NUMBER或RANK。
从以下结果中获取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 重复作为行输出,从而为您提供所需的分组。
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |