2017-06-02 90 views
0

我有表像SQL - PostgreSQL中,基于其他列的增量列的值

create table test(employee integer NOT NULL, code character varying(200), number integer) 

我想自动递增列“数量”上的每个插入记录

insert into test(employee, code) values(17,'bangalore') 
insert into test(employee, code) values(17,'bangalore') 
insert into test(employee, code) values(17,'mumbai') 

我想导致像

employee code  number 
17   bangalore 1 
17   bangalore 2 
17   bangalore 3 
17   mumbai  1 
17   mumbai  2 
17   bangalore 4 
17   mumbai  3 
18   bangalore 1 
18   bangalore 2 
18   mumbai  1 
18   mumbai  2 
+0

做**不**发布代码或注释中的其他信息。 ** [编辑] **你的问题。 –

+2

你为什么要存储这些信息?您可以在检索数据时轻松生成这些数字。 –

+0

我想存储多个地方引用的相同数据 –

回答

0
create table test (employee integer NOT NULL, code character varying(200), number integer) 

    insert into test(employee, code, number) values(17,'bangalore',(select coalesce(max(number) + 1,1) from test where employee = 17 and code = 'bangalore')); 
    insert into test(employee, code, number) values(17,'bangalore',(select coalesce(max(number) + 1,1) from test where employee = 17 and code = 'bangalore')); 
    insert into test(employee, code, number) values(17,'mumbai',(select coalesce(max(number) + 1,1) from test where employee = 17 and code = 'mumbai')); 
+0

我会使用'max'而不是'count'。如果某些行被删除会怎么样? –

+0

@LaurenzAlbe,是的,你是对的。我们必须改变count(*)+ 1来合并(max(number)+ 1,1)。 –

+0

这对单插入正常工作,但我想批量更新。 –

0

对于一批上升d的数据,请尝试下面的方法是否有用。

创建临时表test2的

create table test2(employee integer NOT NULL, code character varying(200)) 

insert into test2(employee, code) values(17,'bangalore') 
insert into test2(employee, code) values(17,'bangalore') 
insert into test2(employee, code) values(17,'mumbai') 

插入到实际表递增的数字

insert into test(employee, code, number) 
select employee, code, row_number() over (partition by code) from test2 

沿着您可以通过条款像主键列或类似CREATED_DATE另一列包括顺序:

over (partition by code order by created_date)