问题描述
如何使用值更新表的第一个Null列以及如何使用文本“ Available”更新其他Null列?
Update Emp
SET Level1 = (CASE WHEN Level1 IS NOT NULL THEN Level1 ELSE PermissionCode END),Level2 = (CASE WHEN Level1 IS NOT NULL AND Level2 IS NULL THEN PermissionCode ELSE Level2 END),..and so on
是否有任何有效的方法可以按预期格式更新表?
Current Table structure:
========================
| EmpID | Level1 | Level2 | Level3 | Level4 |....| Level256 | PermissionCode |
|--------|--------|--------|--------|---------|....|----------|-----------------|
| 124RY7 | abc | wsg | NULL | NULL |....| NULL | RT12345 |
| 5T7YTR | efg | NULL | NULL | NULL |....| NULL | 654GTY |
预期输出:
| EmpID | Level1 | Level2 | Level3 | Level4 |....| Level256 | PermissionCode |
|--------|--------|--------|---------|---------|....|----------|-----------------|
| 124RY7 | abc | wsg |RT12345 |Available|....|Available | RT12345 |
| 5T7YTR | efg | 654GTY |Available|Available|....|Available | 654GTY |
解决方法
尝试结合使用nvl2和合并
select empid,lvl1,lvl2,lvl3,lvl4,PC
from temp
union all
select empid,coalesce(lvl1,PC),nvl2(lvl1,coalesce(lvl2,'Available'),nvl2(lvl2,coalesce(lvl3,nvl2(lvl3,coalesce(lvl4,PC
from temp;
,
问题是实际用例是什么。您可以做的是尝试对所有列的每个级别进行批量更新(只是必须自动提交并手动提交),例如“ set levelX = Available where levelX-1 null”,最终将使您只剩下1在每一行中都为null,然后可以填充代码。