加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 14:18:46 所属栏目:MsSql教程 来源:网络整理
导读:我需要更新这些NULL值: PK | CODE---+-------1 | 202 | NULL3 | NULL4 | 305 | NULL6 | NULL7 | NULL8 | 409 | NULL 像这样: PK | CODE-----+------------1 | 202 | 203 | 204 | 305 | 306 | 307 | 308 | 409 | 40 它应始终基于最后的最小值. 我已经尝试了
我需要更新这些NULL值:

PK |  CODE
---+-------
1  |   20
2  |   NULL
3  |   NULL
4  |   30
5  |   NULL
6  |   NULL
7  |   NULL
8  |   40
9  |   NULL

像这样:

PK   |   CODE
-----+------------
1    |    20
2    |    20
3    |    20
4    |    30
5    |    30
6    |    30
7    |    30
8    |    40
9    |    40

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

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

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

解决方法

你可以这样做:

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;

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读