每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 |
+--------+-----+

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...