我有一个表,需要从中选择数据并添加/创建最多5列的列,然后不断重复直到没有更多的行被选择为止。
基本上,我需要一个如下所示的输出:
ColumnName
1
2
3
4
5
1
2
3
4
5
... until all rows are returned.
答案 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。