如何在Snowflake SQL中仅使用值更新第一个NULL列?

问题描述

如何使用值更新表的第一个Null列以及如何使用文本“ Available”更新其他Null列?

我的尝试:我尝试使用Case语句,但这会影响查询性能

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;

enter image description here

,

问题是实际用例是什么。您可以做的是尝试对所有列的每个级别进行批量更新(只是必须自动提交并手动提交),例如“ set levelX = Available where levelX-1 null”,最终将使您只剩下1在每一行中都为null,然后可以填充代码。