SQL如何有一个重复的数字直到一定的数字然后重新开始

时间:2019-09-05 16:41:14

标签: sql

我有一个表,需要从中选择数据并添加/创建最多5列的列,然后不断重复直到没有更多的行被选择为止。

基本上,我需要一个如下所示的输出:

ColumnName
1
2
3
4
5
1
2
3
4
5
... until all rows are returned.

3 个答案:

答案 0 :(得分:1)

您未指定数据库引擎。在Oracle中,您可以使用:

SELECT CASE MOD(ROWNUM, 5)
         WHEN 0 THEN 5
         ELSE MOD(ROWNUM, 5)
       END AS ONE_TO_FIVE,
       t.*
  FROM YOUR_TABLE t

编辑

或者您可以使用NVL和NULLIF:

SELECT NVL(NULLIF(MOD(ROWNUM, 5), 0), 5) AS ONE_TO_FIVE,
       t.*
  FROM YOUR_TABLE t

答案 1 :(得分:0)

似乎您想要row_number()和模运算。就像这样:

select 1 + ( (row_number() over (order by id) - 1) % 5)
from t;

id是表中的任何列,尤其是用于排序结果集的列。

注意:模运算因数据库而异。有些人使用mod()而不是%

答案 2 :(得分:0)

如果您正在使用具有ROW_NUMBER函数的数据库引擎,则可以利用它,然后取该值的模5:

SELECT (ROW_NUMBER() + 1) % 5 OVER(),
    other items
FROM ...

上面的示例适用于SQL Server,因为OP并未将数据库引擎指定为ATM。