2010-07-29 5 views
0

J'ai besoin de mettre à jour ma table (dépendance) et de définir une nouvelle colonne (vid) à la prochaine valeur d'une séquence. Je ne peux pas changer la façon dont les données sont dans la table, donc ne mentionnez pas la suppression des données redondantes.Mise à jour d'une table db basée sur 2 conditions distinctes

Cependant, la condition where est le problème car 2 conditions doivent être remplies (les colonnes provid et origid). Il y a une clé primaire séparée (prikey). Le tableau se présente comme suit: -

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

Les données de l'échantillon se présente comme suit: -

(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) 

Comme on le voit à partir des données, l'prikey est unique, le origid et ProvID (qui sont en fait Clés étrangères) peut répéter. Dans l'intérêt de cet exemple, j'ai ajouté les valeurs de vid comme elles devraient l'être. Une vid identifie fondamentalement une ligne qui a la même origine et provid.

Ma question: - A quoi ressemble le sql pour mettre à jour ce paramètre de table vid = sequence.nextval où origid et distinct (provid)?

+0

Cela devrait vous aider à démarrer: http://stackoverflow.com/questions/3297102/auto-generating-column-value-with-respect-to-another-column/3297154 # 3297154 – Tobiasopdenbrouw

Répondre

0

Essayez:

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 
Questions connexes