TSQL增加一列并根据另一列重新开始

Joh*_*ohn 3 sql t-sql sql-server sql-server-2008

我有一张表如下:

colA   colB(unique)   colC
---------------------------------
1      1449           0.50000000
1      1451           1.03400000
1      2404           5.98750000
1      1454           6.00000000
3      1465           1.40000000
3      1467           1.56000000
3      1476           3.00000000
3      1469           4.00000000
3      1490           5.00000000
Run Code Online (Sandbox Code Playgroud)

我想让col C成为一个递增的整数(可以离开比例),当colA改变时,它会重新开始,如下所示:

colA  colB (unique)  colC
----------------------------------
1     1449           1.00000000
1     1451           2.00000000
1     2404           3.00000000
1     1454           4.00000000
3     1465           1.00000000
3     1467           2.00000000
3     1476           3.00000000
3     1469           4.00000000
3     1490           5.00000000
Run Code Online (Sandbox Code Playgroud)

这样做的任何想法?我在SQL Server 2008上.这个表可能会非常大.谢谢!

OMG*_*ies 5

我不会存储排名值 - 他们需要维护.我通常会使用这样的视图:

CREATE VIEW your_view AS
  SELECT t.cola,
         t.colb,
         ROW_NUMBER() OVER(PARTITION BY t.cola
                               ORDER BY t.colc) AS colc
    FROM YOUR_TABLE t
Run Code Online (Sandbox Code Playgroud)

但是你可以在UPDATE中使用WITH语句:

WITH summary AS (
  SELECT t.cola,
         t.colb,
         t.colc,
         ROW_NUMBER() OVER(PARTITION BY t.cola
                               ORDER BY t.colc) AS cold
    FROM YOUR_TABLE t)
UPDATE summary
   SET colc = cold
Run Code Online (Sandbox Code Playgroud)