如何仅使用 Snowflake sql 中的值更新第一个 NULL 列?
How to update only first NULL column with a value in Snowflake sql?
如何用值更新 table 第一个 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
是否有任何有效的方法来更新下面提到的 table 预期格式?
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 和 coalesce
select empid, lvl1, lvl2, lvl3, lvl4, PC
from temp
union all
select empid, coalesce(lvl1,lvl2,lvl3,lvl4,PC), nvl2(lvl1, coalesce(lvl2,lvl3,lvl4,PC), 'Available'), nvl2(lvl2, coalesce(lvl3,lvl4,PC), 'Available'), nvl2(lvl3, coalesce(lvl4,PC), 'Available')
, PC
from temp;
问题是实际用例是什么。您可以做的是尝试对所有列的每个级别进行批量更新(只需关闭自动提交并手动提交),例如“set levelX = Available where levelX-1 is null”,最终只会让您只有 1在每一行中都为空,然后您可以用代码填充它。
如何用值更新 table 第一个 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
是否有任何有效的方法来更新下面提到的 table 预期格式?
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 和 coalesce
select empid, lvl1, lvl2, lvl3, lvl4, PC
from temp
union all
select empid, coalesce(lvl1,lvl2,lvl3,lvl4,PC), nvl2(lvl1, coalesce(lvl2,lvl3,lvl4,PC), 'Available'), nvl2(lvl2, coalesce(lvl3,lvl4,PC), 'Available'), nvl2(lvl3, coalesce(lvl4,PC), 'Available')
, PC
from temp;
问题是实际用例是什么。您可以做的是尝试对所有列的每个级别进行批量更新(只需关闭自动提交并手动提交),例如“set levelX = Available where levelX-1 is null”,最终只会让您只有 1在每一行中都为空,然后您可以用代码填充它。