每3行产生行号

问题描述

一种数学或算术方法可以是使用周期数本身:

-- table init here
DECLARE @MIN_PERIOD INT = (SELECT MIN(period) FROM #test)

SELECT period,
       (period - @MIN_PERIOD) / 3 + 1 AS seq
FROM   #test

只要“两个期间之间没有任何间隔”仍然适用,该方法就起作用。

如果您需要WHERE查询中的子句,请将其应用于SELECT MIN()查询。只要WHERE不引起时间间隔就可以正常工作。

解决方法

我想每三行生成一个数字

CREATE TABLE #test(period INT)

INSERT INTO #test
VALUES      (602),(603),(604),(605),(606),(607),(608),(609)

我知道我们可以使用row_number窗口函数或while循环或cursor

SELECT period,( Row_number()OVER(ORDER BY period) - 1 ) / 3 + 1
FROM   #test

结果;

+--------+-----+
| period | seq |
+--------+-----+
|    602 |   1 |
|    603 |   1 |
|    604 |   1 |
|    605 |   2 |
|    606 |   2 |
|    607 |   2 |
|    608 |   3 |
|    609 |   3 |
+--------+-----+

还有其他方法可以在 数学 上实现这一目标。两段之间没有任何间隙

相关文章

猜你在找的编程问答相关文章

在Pandas数据框中旋转数据表
如何获得浮点序列中的下一个值?
获取Instagram粉丝
在批处理结束时检测到不可提交的事务。交易回滚
将一个文本文件文件夹与一个单元格中的每个内容合并为一个CSV文件
在使用JSON数据时,如何防止我的应用程序意外崩溃,“关闭”,而代之以处理异常?
JDBC批处理INSERT,返回ID
具有多个表的复杂INNER JOIN查询的回显结果