You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在SQL DB2-400中对多列非零值进行升序排序并后置零值?

嗨,我明白你要做的事了——把每行里大于0的数值按升序排前面,所有0都挪到后面对吧?用MIN/MAX确实搞不定,因为它们只能抓单个最值,没法批量整理整个序列。给你两个实用的方案,适配不同版本的表格工具:

方案1:适用于Excel 365/2021(支持动态数组)

直接用LET+SORT+FILTER的组合公式,一步生成整行结果:
在你想要输出结果的起始单元格(比如K2)输入:

=LET(x,A2:J2,sorted_positives,SORT(FILTER(x,x>0)),zeros,SEQUENCE(1,10-COUNTA(sorted_positives),0,0),HSTACK(sorted_positives,zeros))

公式逻辑拆解:

  • x,A2:J2:把当前行的10个数据赋值给变量x
  • sorted_positives,SORT(FILTER(x,x>0)):筛选出x里大于0的数值,再按升序排序
  • zeros,SEQUENCE(1,10-COUNTA(sorted_positives),0,0):生成需要补充的0的数量(10减去正数的个数)
  • HSTACK(sorted_positives,zeros):把排序后的正数和0拼接成一行

输入后公式会自动填充整行10个单元格,不用手动拖动。

方案2:适用于所有Excel版本(兼容旧版)

SMALL函数配合IFERROR做数组公式,兼容性拉满:
在输出结果的第一个单元格(比如K2)输入:

=IFERROR(SMALL($A2:$J2,ROW(A1)),0)

然后按Ctrl+Shift+Enter(旧版Excel必须按这个组合键确认数组公式,新版Excel直接回车即可),接着横向拖动这个单元格到T2(一共10个单元格)。

公式逻辑拆解:

  • SMALL($A2:$J2,ROW(A1))ROW(A1)会随着横向拖动依次变成1、2…10,对应取当前行第1小、第2小…第10小的数值
  • IFERROR(...,0):当取到第n小的数值时,如果n超过了正数的总数,SMALL会返回错误,这时候就用0填充

这样就能完美实现你要的效果:正数升序在前,0全部后置。

内容的提问来源于stack exchange,提问作者Francisco Costa

火山引擎 最新活动