如何解决每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 |
+--------+-----+
还有其他方法可以在 数学 上实现这一目标。两段之间没有任何间隙