使用默认值填充非空列之间的空列

时间:2015-09-16 05:58:05

标签: sql sql-server sql-server-2008 null

我正在尝试填充指定列之间的所有NULL列。

我的表:

Table

如果更高级别的值中包含值,我想填充NULL的每一列。

例如:

  • ID为Level3的行应具有默认值(' def')
  • ID为2的行是可以的。最后填充的列是level4,之后没有列有值。
  • ID为Level5,Level6,Level7,Level8,Level9的行应具有默认值(' def')
  • ID为Level4 Level5,Level5,Level6,Level8,Level9的行应具有默认值(' def')

SQL Fiddle

1 个答案:

答案 0 :(得分:3)

这是我能想到的最好的:

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

看起来很乱,但是做了工作

SQL Fiddle