Oracle SQL如何按KUNNR分组获取排除空值空格的最短SORTL值
实现方案
可以使用Oracle的FIRST_VALUE开窗函数实现需求,核心逻辑是先过滤掉SORTL列的无效值,再按KUNNR分组取每组内长度最短的有效SORTL值,映射到分组内所有行。
可直接使用的SQL语句
SELECT BUKRS, KUNNR, SORTL, FIRST_VALUE( CASE WHEN TRIM(SORTL) IS NOT NULL AND TRIM(SORTL) != ' ' THEN SORTL END IGNORE NULLS ) OVER ( PARTITION BY KUNNR ORDER BY LENGTH(TRIM(SORTL)) ASC ) AS SORTL_FINAL FROM 你的业务表名称;
逻辑说明
- 先用CASE表达式将无效的SORTL值(Null、全空格字符串)转换为Null
FIRST_VALUE函数的IGNORE NULLS参数会忽略所有Null值,仅从有效SORTL中取值PARTITION BY KUNNR指定按KUNNR字段分组计算ORDER BY LENGTH(TRIM(SORTL)) ASC将同组内的有效SORTL按长度从小到大排序,取排在第一位的就是长度最短的有效值- 如果存在多个相同最短长度的有效SORTL,可在ORDER BY后追加排序规则,例如追加
SORTL ASC就会取字典序最小的有效值。
内容的提问来源于stack exchange,提问作者Dung Pham
相关产品推荐
相关产品推荐

