row_number関数でupdate

row_numberやdense_rankは便利ですが
すでに連番カラムがあるテーブルの連番を付け直すには

UPDATE table
SET
SeqColumn = Buf.NewSeq
FROM
(
SELECT key1,key2
ROW_NUMBER() OVER
(PARTITION BY key1, key2 ORDER BY sortColumn DESC) AS NewSeq
FROM table
) AS Buf
WHERE
table.key1 = Buf.key1
table.key2 = Buf.key2

こんなかんじですがちょっと難しいし覚えられない。その都度Google先生にお聞きしている。
CTE、これもちょっと難しいのですがこれを使うと

 With MyCTE as
(
select *,
ROW_NUMBER() over(partition by key1,key2 order by SortColumn desc) as NewSeq from Table
)
update MyCTE set SeqColumn=NewSeq;

ぐっと簡単になった
これならなんとか覚えられそう

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です