分别使用每列的第一个值和特定值更新null和特定值

时间:2016-09-21 07:36:27

标签: sql sql-server-2008 updates

我需要更新30列,因为test1 null = 33和33 = 55,test2 null = 122和122 = 55等......如果可能的话,最好用第1行的第一个值更新通过id,我不需要搜索和定义每个值。

的sampleData:

id  test1   test2
1   33      122
2   1       122
3   NULL    35
4   3       NULL
5   59      170
6   33      122

ExpectedResult:

id  test1   test2
1   55      55
2   1       55
3   33      35
4   3       122
5   59      170
6   55      55

我正在尝试如下,它也没有正确更新

UPDATE #tmpOne 
SET test1 = CASE WHEN test1 IS NULL THEN 33 ELSE 55 END,
    test2 = CASE WHEN test2 IS NULL THEN 122 ELSE 55 END

欢迎每个人回答并提前致谢。

3 个答案:

答案 0 :(得分:1)

如果您需要一次,可以使用CASE

UPDATE #tab
SET test1 = CASE WHEN test1=33 THEN 55 WHEN test1 IS NULL THEN 33 ELSE test1 END,
    test2 = CASE WHEN test2=122 THEN 55 WHEN test2 IS NULL THEN 122 ELSE test2 END

答案 1 :(得分:1)

这是一个很好的选择:

UPDATE #tmpOne 
SET 
test1 = CASE ISNULL(test1, '') WHEN  '' THEN 33 WHEN 33 THEN 55 ELSE test1 END,
test2 = CASE ISNULL(test2, '') WHEN  '' THEN 122 WHEN 122 THEN 55 ELSE test2 END

答案 2 :(得分:0)

尝试类似:

UPDATE table
SET test1 = 55
WHERE test1 = (SELECT test1 FROM table WHERE id = 1)

UPDATE table
SET test1 = (SELECT test1 FROM table WHERE id = 1)
WHERE test1 IS NULL