我在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个数字,这只是我在这里的示例中的情况
1条答案
按热度按时间c9qzyr3d1#
使用
coalesce()
它的定义是“返回第一个非null的参数”——这正是您想要的。