基于列数

时间:2015-06-02 14:49:52

标签: sql

所以我有一个表(Org_Contacts)将联系人表链接到一个组织。

该表目前设置如下:

Organization ID (int)
Contact ID (int)
Priority (int)

组织可能有多个联系人,我想插入联系人并根据组织分配了多少联系人我想增加该联系人的优先级。

例如,我有两个组织, ABC(ID:90) XYZ(ID:91)

我为这两个组织提供了5个联系人。 约翰(身份证号码10), 简(ID:11), 史蒂夫(身份证号码:12), 鲍勃(身份证号码:13), 珍妮弗(身份证号码:14)

当我将John作为联系人添加到ABC时,我希望优先级从1开始

Org_Contacts
------------
90|10|1

接下来,我将Jane添加到与联系人相同的组织中,使其优先级为2

Org_Contacts
------------
90|10|1
90|11|2

接下来将添加史蒂夫,但他将成为XYZ的联系人

Org_Contacts
------------
90|10|1
90|11|2
91|12|1

Bob将成为下一个,并将被添加到ABC

Org_Contacts
------------
90|10|1
90|11|2
91|12|1
90|13|3

最后是Jennifer到XYZ

Org_Contacts
------------
90|10|1
90|11|2
91|12|1
90|13|3
91|14|2

我试图在插入语句中完成所有这些。我想也许是一个使用计数的子查询,但我不确定最好的方法。

1 个答案:

答案 0 :(得分:0)

不是保持表中的优先级,而是使用ROW_NUMBER(您没有指定DBMS,但大多数支持它),更容易计算它:

select
   Organization,
   Contact,
   ROW_NUMBER()
   OVER (PARTITION BY Organization
         ORDER BY Contact) AS Priority
from tab
相关问题