大家好 :) 我很想在 Oracle 10g 中找到正确的 SQL 语法。我想想出这样的事情:
SELECT
LAST_VALUE FIELD_INFO OVER(ORDER BY FIELD_1 IS NULL, FIELD_2, FIELD_1)
FROM TABLE_1
FIELD_1 IS NULL
引发语法错误。
你会怎么做?
大家好 :) 我很想在 Oracle 10g 中找到正确的 SQL 语法。我想想出这样的事情:
SELECT
LAST_VALUE FIELD_INFO OVER(ORDER BY FIELD_1 IS NULL, FIELD_2, FIELD_1)
FROM TABLE_1
FIELD_1 IS NULL
引发语法错误。
你会怎么做?
NULL 优先
此表达式是一个紧凑的 Oracle 语法,对于 Nulls 返回 0,对于非 Nulls 返回 1
Order by NVL2(FIELD_1,1,0), ...
或者您可以使用 case 语句:
Order by Case when FIELD_1 is null then 0 else 1 end, ...
NULL 最后
Order by NVL2(FIELD_1,0,1)
Order by Case when FIELD_1 is null then 1 else 0 end, ...
此方法可能有部分优化:
Order by Case when FIELD_1 is null then null else 0 end nulls last, ...
...通过需要稍微少一点的排序区域。
我认为您应该创建一个复合字段并按其排序
COALESCE(FIELD_1,'[lots of spaces to ensure they go first]')||FIELD_2
但是,如果您发布 10-20 条示例记录以准确显示您想要实现的目标,这将非常有帮助。