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)
它应始终基于最后的最小值.
我已经尝试了下面的代码,但它只更新了在开头有价值的那一行之前的第一行.
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)
您可以这样做:
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进行更新。