2010-07-29 132 views
0

我需要更新我的表(依赖项)并将新列(vid)设置为序列的nextval。我无法改变表格中的数据方式,因此请不要提及删除冗余数据。根据2个单独的条件更新数据库表

但是,哪里条件是问题,因为需要满足2个条件(cols provid和origid)。有一个单独的主键(prikey)。该表看起来像这样: -

Table dependency (
    varchar prikey(46), 
    varchar provid(46), 
    varchar origid(46) 
    varchar otherdata(16) 
    vid integer 
) 

样本数据是这样的: -

(prikey, ORIGID, PROVID, VID) 
('AA1', 'C3C87F000001', '23', 1), 
('AA2', 'C3C87F000001', '23', 1), 
('AA3', 'C3C87F000001', '26', 2), 
('AA4', 'C3C87F000001', '53', 3) 
('AA5', 'A3C87F000009', '26', 4), 
('AA6', 'A3C87F000009', '23', 5) 

。从数据可以看出,prikey独特,origid和provid(这实际上是外键)可能会重复。为了这个例子,我已经添加了视频值应该是。 vid基本上标识了具有相同的起始号码提供的行。

我的问题:什么是SQL更新此表设置vid = sequence.nextval其中origid和distinct(provid)?

+0

这应该帮助您开始:http://stackoverflow.com/questions/3297102/auto-generating-column-value-with-respect-to-another-column/3297154 #3297154 – Tobiasopdenbrouw 2010-07-29 12:52:07

回答

0

尝试:

merge into dependency 
USING (SELECT DENSE_RANK() OVER (ORDER BY prikey, ORIGID, PROVID) g, prikey rid FROM dependency) SOURCE 
ON (dependency.prikey = SOURCE.prikey) 
WHEN MATCHED THEN UPDATE SET dependency.vid = SOURCE.g