我想要填充指定列之间的所有NULL
列。
我的表:
如果较高级别中有值,则我希望填充每个NULL
列。
例如:
- ID为1的行的Level3应该有一个默认值(“def”)
- ID为2的行是正确的。最后填充的列是level4,之后没有列有值。
- ID为3的行的Level5、Level6、Level7、Level8、Level9应该有一个默认值(“def”)
- ID为4的行的Level4、Level5、Level6、Level8、Level9应该有一个默认值(“def”)
我想要填充指定列之间的所有NULL
列。
我的表:
如果较高级别中有值,则我希望填充每个NULL
列。
例如:
这是我能想到的最好的方案:
update #Levels
set
level1 = CASE WHEN COALESCE(level2, level3, level4, level5, level6, level7, level8, level9, level10) IS NULL THEN level1 ELSE ISNULL(level1, 'def') END,
level2 = CASE WHEN COALESCE(level3, level4, level5, level6, level7, level8, level9, level10) IS NULL THEN level2 ELSE ISNULL(level2, 'def') END,
level3 = CASE WHEN COALESCE(level4, level5, level6, level7, level8, level9, level10) IS NULL THEN level3 ELSE ISNULL(level3, 'def') END,
level4 = CASE WHEN COALESCE(level5, level6, level7, level8, level9, level10) IS NULL THEN level4 ELSE ISNULL(level4, 'def') END,
level5 = CASE WHEN COALESCE(level6, level7, level8, level9, level10) IS NULL THEN level5 ELSE ISNULL(level5, 'def') END,
level6 = CASE WHEN COALESCE(level7, level8, level9, level10) IS NULL THEN level6 ELSE ISNULL(level6, 'def') END,
level7 = CASE WHEN COALESCE(level8, level9, level10) IS NULL THEN level7 ELSE ISNULL(level7, 'def') END,
level8 = CASE WHEN COALESCE(level9, level10) IS NULL THEN level8 ELSE ISNULL(level8, 'def') END,
level9 = CASE WHEN COALESCE(level10, null) IS NULL THEN level9 ELSE ISNULL(level9, 'def') END
虽然看起来有点乱,但却实现了功能
ELSE
部分替换为 ISNULL(<column>, 'def')
,然后就可以运行了! - Felix PamittanWHERE Level1 IS NULL OR Level2 IS NULL ..
。至少它不必更新带有 WHERE
子句的所有行。 - Felix Pamittan
Level1
,Level2
,Level5
和Level7
中都有值,那么Level6
是否也应该更新为默认值? - Felix Pamittan