2009-08-12 11 views
1

Ich habe eine Tabelle mit diesen SpaltenFix Nummerierung von vielen Artikelgruppen in Tabelle

create table demo (
    ID integer not null, 
    INDEX integer not null, 
    DATA varchar2(10) 
) 

Beispieldaten:

ID INDEX DATA 
1 1  A 
1 3  B 
2 1  C 
2 1  D 
2 5  E 

Ich möchte:

ID INDEX DATA 
1 1  A 
1 2  B   -- 3 -> 2 
2 1  C or D  -- 1 -> 1 or 2 
2 2  D or C  -- 1 -> 2 or 1 
2 3  E   -- 5 -> 3 (closing the gap) 

Gibt es eine Möglichkeit zu den Index pro ID mit einem einzigen SQL-Update neu nummerieren? Beachten Sie, dass die Reihenfolge der Artikel beibehalten werden sollte (dh der Artikel "E" sollte immer noch hinter den Artikeln "C" und "D" stehen.

das Ziel ist es, einen Primärschlüssel über ID und Index zu erstellen.

Wenn es ankommt, ist sich auf Oracle 10g.

Antwort

2
MERGE 
INTO demo d 
USING (
     SELECT rowid AS rid, ROW_NUMBER() OVER (PARTITION BY id ORDER BY index) AS rn 
     FROM demo 
     ) d2 
ON  (d.rowid = d2.rid) 
WHEN MATCHED THEN 
UPDATE 
SET  index = rn 
+0

ein wohlverdienten 25 Punkte! Danke! –

Verwandte Themen