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

时间:2010-10-01 22:38:36

标签: sql sql-server tsql 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

我想让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

这样做有什么想法吗?我在SQL Server 2008上。这个表可能会非常大。谢谢!

1 个答案:

答案 0 :(得分: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

但是你可以在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