在SQL表中重复每个值n次,在不同的列中使用1:n

时间:2018-06-05 15:43:45

标签: mysql sql

编辑添加:不确定为什么表格格式不起作用,但这里是书面示例:

我有一个简单的SQL表(称之为SIMPLE),具有唯一值

**VALUE**
1699
2349
2934
3100

我希望在'VALUE'列中创建每个值的3个重复,并为每个值创建一个索引为1:3的第二列。

有没有人有一个简单的方法呢?

3 个答案:

答案 0 :(得分:0)

以下是使用工会执行此操作的简单方法:

SELECT value, 1 AS idx FROM yourTable UNION ALL
SELECT value, 2 FROM yourTable UNION ALL
SELECT value, 3 FROM yourTable
ORDER BY value, idx;

Demo

答案 1 :(得分:0)

以下效果比union all

更高效
select t.value, n.n
from t cross join
     (select 1 as n union all select 2 union all select 3) n;

为什么呢?该表只需扫描一次。如果表格相对较大,这只是一个问题,但值得一提的是更有效的解决方案。

答案 2 :(得分:0)

以下是SQLite中的一个示例:

CREATE TABLE X(a INT); INSERT INTO X VALUES (1699), (2349), (2934), (3100);
CREATE TABLE Y(b INT); INSERT INTO Y VALUES (1), (2), (3);
SELECT X.a, Y.b FROM X, Y ORDER BY 2, 1;