获取以前的非空值列名

Getting the previous Non Null value columnname

我在 db2 中有一行值如下:

LEVEL1,LEVEL2,LEVEL3,LEVEL4,LEVEL5,LEVEL6,LEVEL7,LEVEL8,  NAME
   AB     BC      CD     EF        GH     NULL     NULL    EGH      TEST

level2的父级是level 1,level 4的父级是level 3。 例如:

BC --> AB(Parent)
CD -->  BC(Parent)

但 EGH 的父级是 GH 最后一个非空字段。

我已经编写了一个查询来获取代码,父列。

select distinct(LEVEL2), LEVEL1 as parent from tablename;

但这并不像 Level8 那样在所有情况下都有效。

是否有任何查询可以通过 PL/SQL 实现 so.or。我是 PL/SQL 的菜鸟。

主要疑惑是如何获取"ColumnName ",以便在查询中替换。

select distinct(LEVEL2), LEVEL1 as parent from tablename;

我需要获取列名 LEVEL7 或 LEVEL6,取最后一个非空值。

您可以使用 coalesce 函数来 return 项目列表中的第一个非空值:

select distinct LEVEL8, COALESCE(level7, level6, level5) as parent 
from tablename;

在您的示例中,这将从 LEVEL5.

return GH

参见reference documentation