我有一个只有一列的表:
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。
那我该如何更新上面指定的行?
谢谢。
答案 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;