根据同一列的先前值更新行。 (MSSQL2008)

时间:2018-09-05 05:46:50

标签: sql-server tsql sql-server-2008

我有一个只有一列的表:

ColA    Rownumb
1   1
1   2
1   3
2   4
1   5
1   6
1   7
2   8
2   9
2   10
2   11
2   12
2   13
2   14
3   15
2   16
2   17
2   18
3   19
3   20
3   21
3   22
3   23
3   24

在第4行,ColA的值首次更改。从第8行开始,它的永久更改是,以下各行也具有值2。我想更新第5、6和7行,以使值1变为2。在第16、17和18行中使用相同的逻辑。我想将ColA从2更新为3。

那我该如何更新上面指定的行?

谢谢。

1 个答案:

答案 0 :(得分:2)

由于您使用SQL-Server-2008区域,因此可以使用递归公用表表达式来做到这一点:

DECLARE @DataSource TABLE
(
    [ColA] INT
   ,[Rownumb] INT
);

INSERT INTO @DataSource ([ColA], [Rownumb])
VALUES (1, 1), (1, 2), (1, 3), (2, 4), (1, 5), (1, 6), (1, 7), (2, 8), (2, 9), (2, 10), (2, 11), (2, 12), (2, 13), (2, 14), (3, 15), (2, 16), (2, 17), (2, 18), (3, 19), (3, 20), (3, 21), (3, 22), (3, 23), (3, 24);


WITH DataSourceRecursive AS
(
    SELECT [ColA]
          ,[Rownumb]
    FROM @DataSource
    WHERE [Rownumb] = 1
    UNION ALL
    SELECT CASE WHEN DS1.[ColA] < DSR.[ColA] THEN DSR.[ColA] ELSE DS1.[ColA] END
          ,DS1.[Rownumb]
    FROM @DataSource DS1
    INNER JOIN DataSourceRecursive DSR
        ON DS1.[Rownumb] = DSR.[RowNumb] + 1
)
SELECT *
FROM DataSourceRecursive;

enter image description here