簡體   English   中英

如何在Snowflake sql中僅使用值更新第一個NULL列?

[英]How to update only first NULL column with a value in Snowflake sql?

如何使用值更新表的第一個空列,並使用文本“可用”更新其他空列?

我的嘗試:我嘗試使用 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 和 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 null 在每一行中,然后您可以用代碼填充。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM