如何生成将写入新列0001且仅在第28行之后更改为0002,然后在第35行之后更改为0003的系列。然后将在第28行之后再次写入0004,依此类推。
Example:
Row_num New_Column
1 0001
2 0001
. .
. .
28 0001
29 0002
. .
. .
55 0002
56 0003
. .
. .
90 0003
91 0004
答案 0 :(得分:0)
这是一个简单但有点浅的
insert into to_period(New_column)
case when row_num=>1 and row_num<29 then '0001' --28
when row_num=>29 and row_num<57 then "0002" --28
when row_num=>57 and row_num<92 then "0003" --35
when row_num=>92 and row_num<120 then "0004" --28
when row_num=>120 and row_num<148 then "0005" --28
when row_num=>148 and row_num<183 then "0006" --35
when row_num=>183 and row_num<211 then "0007" --28
when row_num=>211 and row_num<239 then "0008" --28
when row_num=>239 and row_num<274 then "0009" --35
when row_num=>274 and row_num<302 then "00010" --28
when row_num=>302 and row_num<330 then "00011" --28
when row_num=>330 and row_num<365 then "00012" --35
end;
答案 1 :(得分:0)
您可以使用模运算。对于您提出的问题(在28和35处切换):
select val,
1 + 2 * floor((val - 1) / 35) + ((val - 1) % 35 >= 28)::int
from generate_series(1, 100, 1) gs(val) ;
对于隐含的问题,您仅以28的倍数进行切换:
select val, 1 + floor((val - 1) / 28)
from generate_series(1, 100, 1) gs(val) ;