Teradata SQL - 将重复值列添加到现有表中

时间:2014-07-29 01:07:25

标签: sql teradata

我有一个包含5000条记录的数据集。我想在此数据集中添加3列:第1列的值为1到5,第2列的值为1到4,第3列的值为1到3,如下所示 -

record_id   ser_num5    ser_num4    ser_num3
1           1           1           1
2           2           2           2
3           3           3           3
4           4           4           1
5           5           1           2
6           1           2           3
7           2           3           1
8           3           4           2
9           4           1           3
10          5           2           1
11          1           3           2
12          2           4           3
13          3           1           1
14          4           2           2
15          5           3           3
16          1           4           1
17          2           1           2
18          3           2           3
19          4           3           1
20          5           4           2
….          
5000            

如何在Teradata SQL中执行此操作?我尝试过以下代码,但它没有用 -

CREATE SEQUENCE Test.SerNum5
    AS Int 
    START WITH 1
    INCREMENT BY 1
    MINVALUE 1
    MAXVALUE 5
    CYCLE
;

SELECT NEXT VALUE FOR Test.SerNum5;

另外,无论如何,我可以以某种方式将这一部分合并到现有的"选择列"声明,如果我不能使创建序列工作。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用id上的算术:

select id,
       ((id - 1) mod 5) + 1 as sernum_5,
       ((id - 1) mod 4) + 1 as sernum_4,
       ((id - 1) mod 3) + 1 as sernum_3

如果id不是真的连续,您可以使用row_number()代替:

select id,
       ((row_number() over (order by id) - 1) mod 5) + 1 as sernum_5,
       ((row_number() over (order by id) - 1) mod 4) + 1 as sernum_4,
       ((row_number() over (order by id) - 1) mod 3) + 1 as sernum_3