0

テーブルに新しい列を追加したいので、次のようにしました。

ALTER TABLE myTable ADD pixelorder int

今私のテーブルは次のようになります:

id     |  name  | pixelorder
----------------------------
1525   |   a    |
1528   |   b    |
1525   |   w    |
1526   |   b    |
1526   |   v    |
1528   |   c    |
1525   |   b    |

行をIDでソートしました:

select * from myTable order by id asc

id     |  name  | pixelorder
----------------------------
1525   |   a    |
1525   |   w    |
1525   |   b    |
1526   |   b    |
1526   |   v    |
1528   |   b    |
1528   |   c    |

そして今、各IDの行を数えたいのですが、同じIDの最初の行は「1」で始まり、2番目は2などです)。

だから、私の例では:

id     |  name  | pixelorder
----------------------------
1525   |   a    |    1
1525   |   w    |    2
1525   |   b    |    3
1526   |   b    |    1
1526   |   v    |    2
1528   |   b    |    1
1528   |   c    |    2

どうすればいいですか?

4

2 に答える 2

1

ROW_NUMBER()連番を生成するランキング機能です。数値の生成は再帰的な CTE 内で行われたため、pixelorder. ただし、これはサブクエリを使用して行うこともできます。

WITH records
AS
(
    SELECT  id, name, pixelorder,
            ROW_NUMBER() OVER (PARTITION BY id ORDER BY name) rn
    FROM    tableName
)
UPDATE records 
SET pixelOrder = rn
于 2013-09-23T15:11:37.327 に答える