1つだけ過去を変えられるとしたら?

次のように、コードAとコードBの並び順にNoをSQLで更新するにはどうすれば良いでしょうか?
NoはコードAが変わると1から振りなおしです。

コードA コードB No
A1   B1  
A1   B2  
A1   B3  
A2   B1  
A2   B2  
A2   B3  



コードA コードB No
A1   B1   1
A1   B2   2
A1   B3   3
A2   B1   1
A2   B2   2
A2   B3   3

A 回答 (1件)

PL/SQLで対応する例です。



declare
 cold varchar(5) := ' ';
 nno integer;
 cursor c1 is
  select コードA,コードB,rowid from tbl
  order by コードA,コードB;
begin
 for c1_rec in c1 loop
  if cold != c1_rec.コードA then
   nno := 1;
  else
   nno := nno + 1;
  end if;
  update tbl
  set No = nno
  where rowid = c1_rec.rowid;
  cold := c1_rec.コードA;
 end loop;
end;
/

この回答への補足

UPDATE テーブル A
SET NO = (SELECT RN FROM
(SELECT コードA, コードB
,ROW_NUMBER() OVER (PARTITION BY コードA ORDER BY コードA, コードB) RN
FROM テーブル ) B
WHERE A.コードA = B.コードA
AND A.コードB = B.コードB);

補足日時:2006/10/23 13:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す


おすすめ情報