sql-连接列中的值,但只保留第一个非空值

voase2hg  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(394)

我在postgresql中有下表。前4条记录是基础数据,其他记录是通过rollup函数生成的。
我想添加一列“grp\u 1”,它将显示grp1\u l1、grp2\u l2和grp2\u l3列的第一个非空值

我可以通过使用下面的sql嵌套3个“case”函数来获得所需的结果,但是我的实际表有4个组,每个组有8到10列(因此嵌套了很多“case”函数)。
sql语句:

SELECT grp1_l1, grp1_l2, grp1_l3, case when grp1_l1 is not null then grp1_l1 else case when grp1_l2 is not null then grp1_l2 else case when grp1_l3 is not null then grp1_l3 else null end end end as grp1, value
FROM public.query_test;

是否有更好的、更具可扩展性的方法来处理这个需求?欢迎提出任何建议。id并不总是有3个数字,这只是我在这里的示例中的情况

c9qzyr3d

c9qzyr3d1#

使用 coalesce() 它的定义是“返回第一个非null的参数”——这正是您想要的。

coalesce(grp1_l1, grp1_l2, grp1_l3)

相关问题