基于以前的值SQL SERVER 2005进行更新

gcb*_*fln 5 sql sql-server logic sql-server-2005 sql-update

我需要更新这些NULL值:

PK |  CODE
---+-------
1  |   20
2  |   NULL
3  |   NULL
4  |   30
5  |   NULL
6  |   NULL
7  |   NULL
8  |   40
9  |   NULL
Run Code Online (Sandbox Code Playgroud)

像这样:

PK   |   CODE
-----+------------
1    |    20
2    |    20
3    |    20
4    |    30
5    |    30
6    |    30
7    |    30
8    |    40
9    |    40
Run Code Online (Sandbox Code Playgroud)

它应始终基于最后的最小值.

我已经尝试了下面的代码,但它只更新了在开头有价值的那一行之前的第一行.

QUERY

UPDATE TT 
SET CODE = (SELECT CODE 
FROM #TSPV_TEMP T2 with(nolock)
WHERE T2.KEY = (tt.KEY -1))
FROM #TSPV_TEMP TT with (nolock)
WHERE tt.CODE IS NULL
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 2

您可以这样做:

UPDATE TT 
    SET CODE = (SELECT TOP 1 CODE
                FROM #TSPV_TEMP T2 with(nolock)
                WHERE T2.KEY < tt.KEY AND
                      CODE IS NOT NULL
                ORDER BY KEY DESC
               )
    FROM #TSPV_TEMP TT with (nolock)
    where tt.CODE IS NULL;
Run Code Online (Sandbox Code Playgroud)

请注意子查询中的差异。这将查找先前的非 NULL 值以CODE进行更新。